summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apns-conf.xml1330
-rw-r--r--libcamera/Android.mk19
-rw-r--r--libcamera/LibCameraWrapper.cpp436
-rw-r--r--libcamera/LibCameraWrapper.h65
-rw-r--r--liboverlay/Android.mk35
-rw-r--r--liboverlay/overlay.cpp1490
-rw-r--r--liboverlay/v4l2_utils.c788
-rw-r--r--liboverlay/v4l2_utils.h75
-rw-r--r--libs3cjpeg/Android.mk36
-rw-r--r--libs3cjpeg/Exif.h233
-rw-r--r--libs3cjpeg/JpegEncoder.cpp796
-rw-r--r--libs3cjpeg/JpegEncoder.h240
-rw-r--r--libstagefrighthw/Android.mk27
-rw-r--r--libstagefrighthw/SEC_OMX_Plugin.cpp147
-rw-r--r--libstagefrighthw/SEC_OMX_Plugin.h76
-rw-r--r--libstagefrighthw/SecHardwareRenderer.cpp228
-rw-r--r--libstagefrighthw/SecHardwareRenderer.h78
-rw-r--r--libstagefrighthw/stagefright_overlay_output.cpp51
-rw-r--r--overlay/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.jpgbin298259 -> 0 bytes
-rw-r--r--overlay/frameworks/base/core/res/res/values-de/arrays.xml26
-rw-r--r--overlay/frameworks/base/core/res/res/values-fi-rFI/arrays.xml28
-rw-r--r--overlay/frameworks/base/core/res/res/values-fr/arrays.xml25
-rw-r--r--overlay/frameworks/base/core/res/res/values-it/arrays.xml31
-rwxr-xr-xoverlay/frameworks/base/core/res/res/values-pt-rBR/arrays.xml36
-rw-r--r--overlay/frameworks/base/core/res/res/values-ru/arrays.xml10
-rw-r--r--overlay/frameworks/base/core/res/res/values-sv/arrays.xml28
-rw-r--r--overlay/frameworks/base/core/res/res/values-uk/arrays.xml10
-rw-r--r--overlay/frameworks/base/core/res/res/values-zh-rTW/arrays.xml39
-rw-r--r--overlay/frameworks/base/core/res/res/values/arrays.xml125
-rw-r--r--overlay/frameworks/base/core/res/res/values/config.xml185
-rw-r--r--overlay/frameworks/base/core/res/res/xml/power_profile.xml60
-rw-r--r--overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml22
-rw-r--r--overlay/frameworks/base/tests/ImfTest/res/values/config.xml21
-rw-r--r--overlay/packages/apps/CMParts/res/values/config.xml8
-rw-r--r--overlay/packages/apps/Camera/res/values/config.xml24
-rw-r--r--overlay/packages/apps/Contacts/res/values/config.xml21
-rw-r--r--overlay/packages/apps/FM/res/values/config.xml9
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass.jpgbin420605 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass_small.jpgbin27168 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpgbin323665 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains_small.jpgbin19299 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpgbin39209 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam_small.jpgbin6547 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpgbin42199 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse_small.jpgbin5871 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpgbin154313 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle_small.jpgbin8190 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpgbin439193 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars_small.jpgbin33400 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpgbin42360 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream_small.jpgbin5707 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights.jpgbin227572 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights_small.jpgbin23522 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpgbin206025 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset_small.jpgbin14751 -> 0 bytes
-rw-r--r--overlay/packages/apps/Launcher2/res/values-hdpi/wallpapers.xml36
-rw-r--r--overlay/packages/apps/Phone/res/values/config.xml36
-rw-r--r--overlay/packages/apps/Settings/res/values/bools.xml23
-rw-r--r--overlay/packages/wallpapers/Basic/res/drawable-hdpi/nexus_thumb.pngbin14743 -> 0 bytes
-rw-r--r--overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.pngbin688177 -> 0 bytes
-rw-r--r--overlay/packages/wallpapers/Basic/res/raw/nexus.rs313
-rw-r--r--overlay/packages/wallpapers/Basic/res/values/surfacemode.xml18
-rw-r--r--shbootimg.mk2
63 files changed, 1331 insertions, 5955 deletions
diff --git a/apns-conf.xml b/apns-conf.xml
new file mode 100644
index 0000000..e6cce49
--- /dev/null
+++ b/apns-conf.xml
@@ -0,0 +1,1330 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2006, Google Inc.
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<!-- use empty string to specify no proxy or port -->
+<apns version="6">
+ <apn carrier="Cosmote GR" mcc="202" mnc="01" apn="Internet" type="default,supl" />
+ <apn carrier="Cosmote GR MMS" mcc="202" mnc="01" apn="Mms" mmsc="195.167.65.220:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms" />
+ <apn carrier="Cosmote Wireless Internet" mcc="202" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Cosmote MMS" mcc="202" mnc="01" apn="mms" mmsc="http://195.167.65.220:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms" />
+ <apn carrier="Vf Internet" mcc="202" mnc="05" apn="internet.vodafone.gr" user="user" password="pass" type="default,supl" />
+ <apn carrier="Vf Internet Corporate" mcc="202" mnc="05" apn="internet" user="user" password="pass" type="default,supl" />
+ <apn carrier="Vodafone GR-MMS" mcc="202" mnc="05" apn="mms.vodafone.net" user="user" password="pass" mmsc="http://mms.vodafone.gr" mmsproxy="213.249.19.49" mmsport="5080" type="mms" />
+ <apn carrier="Vodafone GR" mcc="202" mnc="05" apn="surfonly.vodafone.gr" type="default,supl" />
+ <apn carrier="Vodafone GR Prepaid" mcc="202" mnc="05" apn="webkarta.vodafone.gr" type="default,supl" />
+ <apn carrier="Q-Telecom MMS GPRS" mcc="202" mnc="09" apn="q-mms.myq.gr" mmsc="http://mms.myq.gr" mmsproxy="192.168.80.134" mmsport="8080" type="mms" />
+ <apn carrier="WIND GR" mcc="202" mnc="10" apn="gint.b-online.gr" type="default,supl" />
+ <apn carrier="WIND GR MMS" mcc="202" mnc="10" apn="mnet.b-online.gr" user="mms" password="mms" mmsc="http://192.168.200.95/servlets/mms" mmsproxy="192.168.200.11" mmsport="9401" type="mms" />
+ <apn carrier="Tele2 NL" mcc="204" mnc="02" apn="internet.tele2.nl" type="default,supl" />
+ <apn carrier="Tele2 MMS NL" mcc="204" mnc="02" apn="internet.tele2.nl" mmsc="http://mmsc.tele2.nl" mmsproxy="193.12.40.64" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone NL" mcc="204" mnc="04" apn="live.vodafone.com" user="vodafone" password="vodafone" mmsc="http://mmsc.mms.vodafone.nl" mmsproxy="192.168.251.150" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Vodafone MMS Business" mcc="204" mnc="04" apn="office.vodafone.nl" user="vodafone" password="vodafone" mmsc="http://mmsc.mms.vodafone.nl" mmsproxy="192.168.251.150" mmsport="8799" type="mms" />
+ <apn carrier="KPN" mcc="204" mnc="08" apn="internet" user="kpn" password="gprs" type="default,supl" />
+ <apn carrier="KPN" mcc="204" mnc="08" apn="portalmmm.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,supl,mms" />
+ <apn carrier="KPN MMS" mcc="204" mnc="08" apn="portalmmm.nl" proxy="10.10.100.20" port="5080" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="mms" />
+ <apn carrier="TELFORT" mcc="204" mnc="12" apn="internet" type="default,supl" />
+ <apn carrier="Telfort" mcc="204" mnc="12" apn="internet" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="193.113.200.195" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="TELFORT MMS" mcc="204" mnc="12" apn="portalmmm.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="9201" type="mms" />
+ <apn carrier="T-Mobile NL" mcc="204" mnc="16" apn="internet" type="default,supl" />
+ <apn carrier="T-Mobile NL-MMS" mcc="204" mnc="16" apn="mms" user="tmobilemms" password="tmobilemms" server="*" mmsc="http://t-mobilemms" mmsproxy="010.010.010.011" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile NL" mcc="204" mnc="16" apn="smartsites.t-mobile" user="*" password="*" server="*" mmsc="http://t-mobilemms" mmsproxy="010.010.010.011" mmsport="8080" type="default,supl" />
+ <apn carrier="Orange NL" mcc="204" mnc="20" apn="internet" type="default,supl" />
+ <apn carrier="Orange NL MMS" mcc="204" mnc="20" apn="mms" mmsc="http://mms.orange.nl:8002" mmsproxy="10.250.255.183" mmsport="9201" type="mms" />
+ <apn carrier="rabo.plus" mcc="204" mnc="20" apn="rabo.plus" type="default,supl" />
+ <apn carrier="Proximus MMS" mcc="206" mnc="01" apn="event.proximus.be" user="mms" password="mms" mmsc="http://mmsc.proximus.be/mms" mmsproxy="10.55.14.75" mmsport="8080" type="mms" />
+ <apn carrier="Proximus Internet" mcc="206" mnc="01" apn="internet.proximus.be" type="default,supl" />
+ <apn carrier="Mobistar MMS" mcc="206" mnc="10" apn="mms.be" user="mobistar" password="mobistar" mmsc="http://mmsc.mobistar.be" mmsproxy="212.65.63.143" mmsport="8080" type="mms" />
+ <apn carrier="Mobistar" mcc="206" mnc="10" apn="mworld.be" user="mobistar" password="mobistar" proxy="212.65.63.143" port="8080" type="default,supl" />
+ <apn carrier="Telenet" mcc="206" mnc="10" apn="telenetwap.be" type="default,supl" />
+ <apn carrier="BASE Belgium" mcc="206" mnc="20" apn="gprs.base.be" user="base" password="base" type="default,supl" />
+ <apn carrier="BASE MMS Belgium" mcc="206" mnc="20" apn="mms.base.be" user="base" password="base" mmsc="http://mmsc.base.be" mmsproxy="217.72.235.1" mmsport="8080" type="mms" />
+ <apn carrier="Mobile Vikings MMS" mcc="206" mnc="20" apn="mms.be" user="mms" password="mms" mmsc="http://mmsc.be" mmsproxy="217.72.235.1" mmsport="8080" type="mms" />
+ <apn carrier="Mobile Vikings" mcc="206" mnc="20" apn="web.be" user="web" password="web" type="default,supl" />
+ <apn carrier="Virgin" mcc="208" mnc="01" apn="ofnew.fr" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Orange FR-MMS" mcc="208" mnc="01" apn="orange.acte" user="orange" password="orange" server="*" mmsc="http://mms.orange.fr" mmsproxy="192.168.010.200" mmsport="8080" type="mms" />
+ <apn carrier="Orange Internet" mcc="208" mnc="01" apn="orange.fr" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Orange World FR" mcc="208" mnc="01" apn="orange" user="orange" password="orange" server="*" type="default,supl" />
+ <apn carrier="MMS Orange GPRS" mcc="208" mnc="02" apn="orange.acte" user="orange" password="orange" mmsc="http://mms.orange.fr/" mmsproxy="192.168.10.200" mmsport="8080" type="mms" />
+ <apn carrier="Orange GPRS ISP" mcc="208" mnc="02" apn="orange.fr" type="default,supl" />
+ <apn carrier="SFR MMS" mcc="208" mnc="10" apn="mmssfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="mms" />
+ <apn carrier="SFR" mcc="208" mnc="10" apn="sl2sfr" server="*" type="default,supl" />
+ <apn carrier="SFR WAP" mcc="208" mnc="10" apn="wapsfr" user="none" password="none" server="*" proxy="195.115.25.129" port="8080" type="default,supl" />
+ <apn carrier="ACCESS DATA" mcc="208" mnc="10" apn="websfr" type="default,supl" />
+ <apn carrier="MMS" mcc="208" mnc="11" apn="mmssfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="mms" />
+ <apn carrier="ACCESS DATA" mcc="208" mnc="11" apn="websfr" type="default,supl" />
+ <apn carrier="MMS" mcc="208" mnc="13" apn="mmssfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="mms" />
+ <apn carrier="ACCESS DATA" mcc="208" mnc="13" apn="websfr" type="default,supl" />
+ <apn carrier="NRJ Mobile FR" mcc="208" mnc="10" apn="fnetnrj" type="default,supl" />
+ <apn carrier="NRJ Mobile FR MMS" mcc="208" mnc="10" apn="mmsnrj" mmsproxy="010.143.156.005" mmsport="8080" mmsc="http://mmsnrj" type="mms" />
+ <apn carrier="Bouygues Pro" mcc="208" mnc="20" apn="a2bouygtel.com" type="default,supl,mms" />
+ <apn carrier="Bouygues WEB" mcc="208" mnc="20" apn="mmsbouygtel.com" server="*" type="default,supl" />
+ <apn carrier="Bouygues Telecom" mcc="208" mnc="20" apn="mmsbouygtel.com" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Bouygues MMS" mcc="208" mnc="20" apn="mmsbouygtel.com" server="*" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="mms" />
+ <apn carrier="BouyguesGPRS ISP" mcc="208" mnc="21" apn="ebouygtel.com" type="default,supl" />
+ <apn carrier="MMS Bouygues" mcc="208" mnc="21" apn="mmsbouygtel.com" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="mms" />
+ <apn carrier="BouyguesGPRS ISP" mcc="208" mnc="88" apn="ebouygtel.com" type="default,supl" />
+ <apn carrier="MMS Bouygues" mcc="208" mnc="88" apn="mmsbouygtel.com" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone ES-Internet" mcc="214" mnc="01" apn="ac.vodafone.es" user="vodafone" password="vodafone" type="default,supl" />
+ <apn carrier="Vodafone" mcc="214" mnc="01" apn="airtelwap.es" user="wap@wap" password="wap125" type="default,supl" />
+ <apn carrier="Vodafone ES" mcc="214" mnc="01" apn="airtelwap.es" user="wap@wap" password="wap125" type="supl" />
+ <apn carrier="Vodafone ES MMS" mcc="214" mnc="01" apn="mms.vodafone.net" user="wap@wap" password="wap125" mmsc="http://mmsc.vodafone.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" />
+ <apn carrier="Orange Internet ES" mcc="214" mnc="03" apn="internet" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Orange ES MMS" mcc="214" mnc="03" apn="orangemms" user="orange" password="orange" mmsc="http://mms.orange.es" mmsproxy="172.22.188.25" mmsport="8080" type="mms" />
+ <apn carrier="Orange World ES" mcc="214" mnc="03" apn="orangeworld" user="orange" password="orange" proxy="10.32.61.10" port="8080" type="default,supl" />
+ <apn carrier="Yoigo" mcc="214" mnc="04" apn="internet" proxy="010.008.000.036" port="8080" type="default,supl" />
+ <apn carrier="Yoigo MMS" mcc="214" mnc="04" apn="mms" mmsc="http://mms" mmsproxy="193.209.134.141" mmsport="80" type="mms" />
+ <apn carrier="INTERNET GPRS" mcc="214" mnc="06" apn="airtelnet.es" user="vodafone" password="vodafone" type="default,supl" />
+ <apn carrier="Pepephone Internet" mcc="214" mnc="06" apn="gprs.pepephone.com" type="default,supl" />
+ <apn carrier="Pepephone MMS" mcc="214" mnc="06" apn="mms.pepephone.com" user="wap@wap" password="wap125" mmsproxy="212.073.032.010" mmsport="80" type="mms" />
+ <apn carrier="MMS Vodafone" mcc="214" mnc="06" apn="mms.vodafone.net" user="wap@wap" password="wap125" mmsc="http://mmsc.vodafone.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" />
+ <apn carrier="Movistar ES" mcc="214" mnc="07" apn="movistar.es" user="MOVISTAR" password="MOVISTAR" type="default,supl" />
+ <apn carrier="Movistar ES-MMS" mcc="214" mnc="07" apn="telefonica.es" user="telefonica" password="telefonica" mmsc="http://mms.movistar.com" mmsproxy="10.138.255.5" mmsport="8080" type="mms" />
+ <apn carrier="blau ES" mcc="214" mnc="19" apn="gprs-service.com" mmsc="http://217.18.32.180:8080" mmsproxy="217.18.32.181" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Simyo ES" mcc="214" mnc="19" apn="gprs-service.com" type="default,supl" />
+ <apn carrier="Simyo ES-MMS" mcc="214" mnc="19" apn="gprs-service.com" password="1234" mmsc="http://mms-services.eu" mmsproxy="217.12.32.180" mmsport="8080" type="mms" />
+ <apn carrier="Jazztel" mcc="214" mnc="21" apn="jazzinternet" type="default,supl" />
+ <apn carrier="Jazztel MMS" mcc="214" mnc="21" apn="jazzmms" mmsc="http://jazztelmms.com:8081" mmsproxy="217.18.32.183" mmsport="8081" type="mms" />
+ <apn carrier="Pannon MMS" mcc="216" mnc="01" apn="mms" mmsc="http://mmsc.pgsm.hu/" mmsproxy="193.225.154.22" mmsport="8080" type="mms" />
+ <apn carrier="Pannon" mcc="216" mnc="01" apn="net" type="default,supl" />
+ <apn carrier="T-Mobile NET GPRS" mcc="216" mnc="30" apn="internet" type="default,supl" />
+ <apn carrier="T-Mobile HU MMS" mcc="216" mnc="30" apn="mms" user="mms" password="mms" mmsc="http://mms.t-mobile.hu/servlets/mms" mmsproxy="212.51.126.10" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile HU" mcc="216" mnc="30" apn="wnw" mmsc="http://mms.t-mobile.hu/servlets/mms" mmsproxy="212.51.126.10" mmsport="8080" type="default,supl" />
+ <apn carrier="Vodafone HU" mcc="216" mnc="70" apn="internet.vodafone.net" type="default,supl" />
+ <apn carrier="Vodafone HU MMS" mcc="216" mnc="70" apn="mms.vodafone.net" mmsc="http://mms.vodafone.hu/servlets/mms" mmsproxy="80.244.97.2" mmsport="8080" type="mms" />
+ <apn carrier="ERONET START" mcc="218" mnc="03" apn="gprs.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="default,supl"/>
+ <apn carrier="ERONET MI 50" mcc="218" mnc="03" apn="web.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="supl"/>
+ <apn carrier="ERONET MI 200" mcc="218" mnc="03" apn="web.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="supl"/>
+ <apn carrier="ERONET 512" mcc="218" mnc="03" apn="data1.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="supl"/>
+ <apn carrier="ERONET 1GB" mcc="218" mnc="03" apn="data4.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="supl"/>
+ <apn carrier="ERONET 4GB" mcc="218" mnc="03" apn="data2.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="supl"/>
+ <apn carrier="ERONET FLAT" mcc="218" mnc="03" apn="data3.eronet.ba" user="" server="" password="" proxy="" port="" mmsc="" type="supl"/>
+ <apn carrier="ERONET MMS" mcc="218" mnc="03" apn="mms.eronet.ba" user="" server="" password="" mmsc="http://mms.gprs.eronet.ba/mms/wapenc" mmsproxy="010.012.003.001" mmsport="8080" type="mms"/>
+ <apn carrier="BH Mobile" mcc="218" mnc="90" apn="active.bhmobile.ba" type="default,supl" />
+ <apn carrier="BH Mobile MMS" mcc="218" mnc="90" apn="mms.bhmobile.ba" mmsc="http://mms.bhmobile.ba/cmmsc/post" mmsproxy="195.222.056.041" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile HR MMS" mcc="219" mnc="01" apn="mms.htgprs" mmsc="http://mms.t-mobile.hr/servlets/mms" mmsproxy="10.12.0.4" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile HR" mcc="219" mnc="01" apn="web.htgprs" type="default,supl" />
+ <apn carrier="Tele2 HR" mcc="219" mnc="02" apn="wap.tele2.hr" mmsc="http://mmsc.tele2.hr" mmsproxy="193.12.40.66" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="VIPnet" mcc="219" mnc="10" apn="gprs0.vipnet.hr" type="default,supl" />
+ <apn carrier="VIPnet MMS" mcc="219" mnc="10" apn="mms.vipnet.hr" mmsc="http://mms.vipnet.hr/servlets/mms" mmsproxy="212.91.99.91" mmsport="8080" type="mms" />
+ <apn carrier="Telenor RS" mcc="220" mnc="01" apn="internet" user="telenor" password="gprs" proxy="217.65.192.33" port="8080" type="default,supl,mms" />
+ <apn carrier="Telenor RS MMS" mcc="220" mnc="01" apn="mms" mmsc="http://mms.telenor.rs/servlets/mms" mmsproxy="217.65.192.33" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="MTS RS" mcc="220" mnc="03" apn="gprswap" user="mts" password="064" proxy="172.017.088.198" port="8080" type="default,supl,mms" />
+ <apn carrier="MTS RS MMS" mcc="220" mnc="03" apn="mms" user="mts" password="064" mmsc="http://mms.mts064.telekom.rs/mms/wapenc" mmsproxy="172.017.085.131" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="VIP MMS" mcc="220" mnc="05" apn="vipmobile.mms" user="vipmobile" password="vipmobile" mmsc="http://mmsc.vipmobile.rs/" mmsproxy="212.15.182.82" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="VIP" mcc="220" mnc="05" apn="vipmobile" user="vipmobile" password="vipmobile" proxy="212.15.182.82" port="8080" type="default,supl,mms" />
+ <apn carrier="TIM IT" mcc="222" mnc="01" apn="ibox.tim.it" type="default,supl" />
+ <apn carrier="TIM IT WAP" mcc="222" mnc="01" apn="wap.tim.it" proxy="213.26.205.1" port="80" user="WAPTIM" password="WAPTIM" server="http://wap.i.tim.it" type="default,supl" />
+ <apn carrier="NOVERCA MMS" mcc="222" mnc="01" apn="mms.noverca.it" mmsc="http://mms.noverca.it/" mmsproxy="213.230.130.89" mmsport="80" type="mms" />
+ <apn carrier="TIM MMS" mcc="222" mnc="01" apn="mms.tim.it" mmsc="http://mms.tim.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" type="mms" />
+ <apn carrier="iTIM" mcc="222" mnc="01" apn="unico.tim.it" proxy="213.230.130.89" port="80" mmsc="http://mms.tim.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" type="mms" />
+ <apn carrier="NOVERCA WEB" mcc="222" mnc="01" apn="web.noverca.it" type="default,supl" />
+ <apn carrier="Vodafone IT MMS" mcc="222" mnc="10" apn="mms.vodafone.it" mmsc="http://mms.vodafone.it/servlets/mms" mmsproxy="10.128.224.10" mmsport="80" type="mms" />
+ <apn carrier="Vodafone IT" mcc="222" mnc="10" apn="mobile.vodafone.it" type="default,supl" />
+ <apn carrier="Vodafone WEB" mcc="222" mnc="10" apn="web.omnitel.it" type="default,supl" />
+ <apn carrier="Wind IT WEB" mcc="222" mnc="88" apn="internet.wind" type="default,supl" />
+ <apn carrier="Wind IT MMS" mcc="222" mnc="88" apn="mms.wind" mmsc="http://mms.wind.it" mmsproxy="212.245.244.011" mmsport="8080" type="mms" />
+ <apn carrier="Fastweb" mcc="222" mnc="99" apn="apn.fastweb.it" mmsc="http://mms.fastweb.it/mms/wapenc" mmsproxy="10.0.65.9" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="3 IT" mcc="222" mnc="99" apn="tre.it" mmsc="http://10.216.59.240:10021/mmsc" mmsproxy="wsb.treumts.it" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="3" mcc="222" mnc="99" apn="tre.it" mmsc="http://10.216.59.240:10021/mmsc" mmsproxy="62.13.171.3" mmsport="8799" type="default,supl" />
+ <apn carrier="Vodafone Internet" mcc="226" mnc="01" apn="internet.vodafone.ro " user="internet.vodafone.ro " password="vodafone" type="default,supl" />
+ <apn carrier="Vodafone RO" mcc="226" mnc="01" apn="internet.vodafone.ro" user="internet.vodafone.ro" password="vodafone" type="default,supl" />
+ <apn carrier="Vodafone RO live! PRE" mcc="226" mnc="01" apn="live.pre.vodafone.com" user="live" password="vodafone" proxy="193.230.161.231" port="8080" type="default,supl" />
+ <apn carrier="Vodafone RO live!" mcc="226" mnc="01" apn="live.vodafone.com" user="live" password="vodafone" proxy="193.230.161.231" port="8080" type="default,supl" />
+ <apn carrier="Vodafone RO MMS PRE" mcc="226" mnc="01" apn="mms.pre.vodafone.ro" user="mms" password="vodafone" mmsc="http://multimedia/servlets/mms" mmsproxy="193.230.161.231" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone RO MMS" mcc="226" mnc="01" apn="mms.vodafone.ro" user="mms" password="vodafone" mmsc="http://multimedia/servlets/mms" mmsproxy="193.230.161.231" mmsport="8080" type="mms" />
+ <apn carrier="Cosmote Broadband RO" mcc="226" mnc="03" apn="broadband" type="default,supl" />
+ <apn carrier="Cosmote Internet RO" mcc="226" mnc="03" apn="internet" type="default,supl" />
+ <apn carrier="Cosmote RO MMS" mcc="226" mnc="03" apn="mms" user="mms" password="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" />
+ <apn carrier="Cosmote WNW RO" mcc="226" mnc="03" apn="wnw" user="wnw" password="wnw" proxy="20.252.1.62" port="8080" type="default,supl" />
+ <apn carrier="Digi.Mobil" mcc="226" mnc="05" apn="internet" type="default,supl" />
+ <apn carrier="Orange RO" mcc="226" mnc="10" apn="internet" type="default,supl" />
+ <apn carrier="Orange RO MMS" mcc="226" mnc="10" apn="mms" mmsc="http://wap.mms.orange.ro:8002" mmsproxy="62.217.247.252" mmsport="8799" type="mms" />
+ <apn carrier="Swisscom MMS" mcc="228" mnc="01" apn="event.swisscom.ch" mmsc="http://mms.natel.ch:8079" mmsproxy="192.168.210.2" mmsport="8080" type="mms" />
+ <apn carrier="Swisscom" mcc="228" mnc="01" apn="gprs.swisscom.ch" type="default,supl" />
+ <apn carrier="Sunrise Internet" mcc="228" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="Sunrise MMS" mcc="228" mnc="02" apn="mms.sunrise.ch" user="mms" password="mms" mmsc=" http://mmsc.sunrise.ch" mmsproxy="212.35.34.75" mmsport="8080" type="mms" />
+ <apn carrier="Orange CH" mcc="228" mnc="03" apn="internet" type="default,supl" />
+ <apn carrier="Orange CH-MMS" mcc="228" mnc="03" apn="mms" mmsc="http://192.168.151.3:8002" mmsproxy="192.168.151.002" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile CZ" mcc="230" mnc="01" apn="internet.t-mobile.cz" user="wap" password="wap" server="*" mmsc="http://mms" mmsproxy="010.000.000.010" mmsport="80" type="default,supl" />
+ <apn carrier="T-Mobile CZ MMS" mcc="230" mnc="01" apn="mms.t-mobile.cz" user="mms" password="mms" server="*" mmsc="http://mms" mmsproxy="010.000.000.010" mmsport="80" type="mms" />
+ <apn carrier="O2 CZ-Internet" mcc="230" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="O2 CZ-MMS" mcc="230" mnc="02" apn="mms" server="O2 MMS" mmsc="http://mms.o2active.cz:8002" mmsproxy="160.218.160.218" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone CZ" mcc="230" mnc="03" apn="internet" type="default,supl" />
+ <apn carrier="Vodafone CZ MMS" mcc="230" mnc="03" apn="mms" user="mms" password="mms" server="mms" mmsc="http://mms" mmsproxy="10.11.10.111" mmsport="80" type="mms" />
+ <apn carrier="Vodafone CZ Prepaid" mcc="230" mnc="03" apn="ointernet" type="default,supl" />
+ <apn carrier="Orange SK" mcc="231" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Orange SK MMS" mcc="231" mnc="01" apn="mms" user="wap" password="wap" mmsc="http://imms.orange.sk" mmsproxy="213.151.208.145" mmsport="8799" type="mms" />
+ <apn carrier="T-Mobile SK" mcc="231" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="T-Mobile SK MMS" mcc="231" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://mms" mmsproxy="192.168.1.1" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile SK" mcc="231" mnc="04" apn="internet" type="default,supl" />
+ <apn carrier="T-Mobile SK MMS" mcc="231" mnc="04" apn="mms" user="mms" password="mms" mmsc="http://mms" mmsproxy="192.168.1.1" mmsport="8080" type="mms" />
+ <apn carrier="Orange Internet" mcc="231" mnc="05" apn="internet" type="default,supl" />
+ <apn carrier="Orange MMS" mcc="231" mnc="05" apn="mms" user="wap" password="wap" mmsc="http://imms.orange.sk" mmsproxy="213.151.208.145" mmsport="8799" type="mms" />
+ <apn carrier="O2 SK" mcc="231" mnc="06" apn="o2internet" type="default,supl" />
+ <apn carrier="O2 SK MMS" mcc="231" mnc="06" apn="o2mms" mmsc="http://mms.o2world.sk:8002" mmsproxy="10.97.1.11" mmsport="8080" type="mms" />
+ <apn carrier="Mobilkom" mcc="232" mnc="01" apn="a1.net" user="ppp@a1plus.at" password="ppp" type="default,supl" />
+ <apn carrier="A1" mcc="232" mnc="01" apn="a1.net" user="ppp@A1plus.at" password="ppp" server="*" mmsc="http://mmsc.A1.net" mmsproxy="194.048.124.071" mmsport="8001" type="default,supl,mms" />
+ <apn carrier="Mobilkom MMS" mcc="232" mnc="01" apn="free.a1.net" user="ppp@a1plus.at" password="ppp" mmsc="http://mmsc.a1.net" mmsproxy="194.48.124.71" mmsport="8001" type="mms" />
+ <apn carrier="T-Mobile AT" mcc="232" mnc="03" apn="gprsinternet" user="t-mobile" password="tm" server="*" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="010.012.000.020" mmsport="80" type="default,supl" />
+ <apn carrier="T-Mobile AT-MMS" mcc="232" mnc="03" apn="gprsmms" user="t-mobile" password="tm" server="*" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="010.012.000.020" mmsport="80" type="mms" />
+ <apn carrier="Orange AT-MMS" mcc="232" mnc="05" apn="mms.one.at" user="mms" password="mms" server="*" mmsc="http://mmsc.one.at/mms/wapenc" mmsproxy="194.024.128.118" mmsport="8080" type="mms" />
+ <apn carrier="Orange MMS" mcc="232" mnc="05" apn="orange.mms" user="mms" password="mms" mmsc="http://mmsc.orange.at/mms/wapenc" mmsproxy="194.24.128.118" mmsport="8080" type="mms" />
+ <apn carrier="Orange Web" mcc="232" mnc="05" apn="orange.web" user="web" password="web" type="default,supl" />
+ <apn carrier="Orange AT" mcc="232" mnc="05" apn="web.one.at" user="web" password="web" server="*" mmsc="http://mmsc.one.at/mms/wapenc" mmsproxy="194.024.128.118" mmsport="8080" type="default,supl" />
+ <apn carrier="tele.ring MMS" mcc="232" mnc="07" apn="mms" user="wap@telering.at" password="wap" mmsc="http://relay.mms.telering.at" mmsproxy="212.95.31.50" mmsport="8080" type="mms" />
+ <apn carrier="tele.ring WEB" mcc="232" mnc="07" apn="web" user="web@telering.at" password="web" type="default,supl" />
+ <apn carrier="Drei A" mcc="232" mnc="10" apn="drei.at" user="drei" server="http://mobile.drei.at" mmsc="http://mmsc" mmsproxy="213.094.078.133" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Bob" mcc="232" mnc="11" apn="bob.at" user="data@bob.at" password="ppp" server="http://start.bob.at/" type="default,supl" />
+ <apn carrier="Bob MMS" mcc="232" mnc="11" apn="mms.bob.at" user="data@bob.at" password="web" server="http://start.bob.at/" proxy="194.48.124.7" port="8001" mmsc="http://mmsc.bob.at" mmsproxy="194.48.124.7" mmsport="8001" type="mms" />
+ <apn carrier="Yesss" mcc="232" mnc="12" apn="web.yesss.at" type="default,supl" />
+ <apn carrier="UBIQUISYS" mcc="234" mnc="01" apn="internet" type="default,supl,mms" />
+ <apn carrier="O2 MOBILE WEB" mcc="234" mnc="02" apn="mobile.o2.co.uk" user="O2web" password="O2web" type="default,supl" />
+ <apn carrier="O2 MMS Prepay" mcc="234" mnc="02" apn="payandgo.o2.co.uk" user="payandgo" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="O2 MMS Postpay" mcc="234" mnc="02" apn="wap.o2.co.uk" user="o2wap" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="Giffgaff" mcc="234" mnc="10" apn="giffgaff.com" user="giffgaff" server="http://mmsc.mediamessaging.co.uk:8002" password="password" mmsproxy="193.113.200.195" mmsport="8080" mmsc="http://mmsc.mediamessaging.co.uk:8002" type="default,supl,mms" />
+ <apn carrier="O2 UK MMS" mcc="234" mnc="10" apn="idata.o2.co.uk" user="vertigo" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="O2 UK" mcc="234" mnc="10" apn="mobile.o2.co.uk" user="O2web" password="O2web" type="default,supl" />
+ <apn carrier="O2 UK" mcc="234" mnc="10" apn="mobile.o2.co.uk" user="vertigo" type="default,supl,mms" />
+ <apn carrier="O2 UK Prepay MMS" mcc="234" mnc="10" apn="payandgo.o2.co.uk" user="Vertigo" port="8080" mmsc="http://mmsc.mms.o2.co.uk" mmsproxy="193.113.200.195" type="default,supl,mms" />
+ <apn carrier="O2 MMS Prepay" mcc="234" mnc="10" apn="payandgo.o2.co.uk" user="payandgo" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="Tesco" mcc="234" mnc="10" apn="prepay.tesco-mobile.com" user="tescowap" password="tescowap" proxy="193.113.200.195" port="8080" mmsc="http://mmsc.mms.02.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="O2 UK Postpay MMS" mcc="234" mnc="10" apn="wap.o2.co.uk" user="O2wap" port="8080" mmsc="http://mmsc.mms.o2.co.uk" mmsproxy="193.113.200.195" type="default,supl,mms" />
+ <apn carrier="O2 MMS Postpay" mcc="234" mnc="10" apn="wap.o2.co.uk" user="o2wap" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="O2 MOBILE WEB" mcc="234" mnc="11" apn="mobile.o2.co.uk" user="O2web" password="O2web" type="default,supl" />
+ <apn carrier="O2 MMS Prepay" mcc="234" mnc="11" apn="payandgo.o2.co.uk" user="payandgo" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="O2 MMS Postpay" mcc="234" mnc="11" apn="wap.o2.co.uk" user="o2wap" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone UK Contract Internet" mcc="234" mnc="15" apn="Internet" user="web" password="web" server="*" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.012" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Vodafone Post-pay ISP" mcc="234" mnc="15" apn="internet" user="web" password="web" type="default,supl" />
+ <apn carrier="Talkmobile" mcc="234" mnc="15" apn="payg.talkmobile.co.uk" type="default,supl" />
+ <apn carrier="Talkmobile MMS" mcc="234" mnc="15" apn="payg.talkmobile.co.uk" user="wap" password="password" mmsc="http://mms.talkmobile.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="mms" />
+ <apn carrier="Vodafone Prepay" mcc="234" mnc="15" apn="pp.vodafone.co.uk" user="wap" password="wap" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Vodafone UK Contract WAP" mcc="234" mnc="15" apn="wap.vodafone.co.uk" user="wap" password="wap" server="*" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.012" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="3 UK" mcc="234" mnc="20" apn="three.co.uk" mmsc="http://mms.um.three.co.uk:10021/mmsc" mmsproxy="mms.three.co.uk" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="T-Mobile UK" mcc="234" mnc="30" apn="general.t-mobile.uk" user="t-mobile" password="tm" server="*" mmsc="http://mmsc.t-mobile.co.uk:8002" mmsproxy="149.254.201.135" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Picture Message" mcc="234" mnc="30" apn="general.t-mobile.uk" user="user" password="wap" mmsc="http://mmsc.t-mobile.co.uk:8002" mmsproxy="149.254.201.135" mmsport="8080" type="mms" />
+ <apn carrier="Virgin UK" mcc="234" mnc="30" apn="goto.virginmobile.uk" user="user" type="default,supl" />
+ <apn carrier="Virgin UK MMS" mcc="234" mnc="30" apn="goto.virginmobile.uk" mmsc="http://mms.virginmobile.co.uk:8002" mmsproxy="193.30.166.2" mmsport="8080" type="mms" />
+ <apn carrier="Virgin UK" mcc="234" mnc="31" apn="goto.virginmobile.uk" user="user" type="default,supl" />
+ <apn carrier="Virgin UK MMS" mcc="234" mnc="31" apn="pp.vodafone.co.uk" user="wap" password="wap" mmsc="http://mms.virginmobile.co.uk:8002" mmsproxy="149.254.201.135" mmsport="8080" type="mms" />
+ <apn carrier="Virgin UK" mcc="234" mnc="32" apn="goto.virginmobile.uk" user="user" type="default,supl" />
+ <apn carrier="Virgin UK MMS" mcc="234" mnc="32" apn="pp.vodafone.co.uk" user="wap" password="wap" mmsc="http://mms.virginmobile.co.uk:8002" mmsproxy="149.254.201.135" mmsport="8080" type="mms" />
+ <apn carrier="Orange UK" mcc="234" mnc="33" apn="orangeinternet" type="default,supl" />
+ <apn carrier="Orange UK MMS" mcc="234" mnc="33" apn="orangemms" user="Orange" password="Multimedia" proxy="192.168.224.010" port="8080" mmsc="http://mms.orange.co.uk" mmsproxy="192.168.224.010" mmsport="8080" type="mms" />
+ <apn carrier="Orange Internet" mcc="234" mnc="34" apn="orangeinternet" type="default,supl" />
+ <apn carrier="Orange MMS" mcc="234" mnc="34" apn="orangemms" mmsc="http://mms.orange.co.uk/" mmsproxy="192.168.224.010" mmsport="8080" type="mms" />
+ <apn carrier="Jersey MMS" mcc="234" mnc="50" apn="mms" user="mms" password="mms" mmsc="http://mms.surfmail.com/mmsc" mmsproxy="212.9.19.199" mmsport="3130" type="mms" />
+ <apn carrier="Jersey" mcc="234" mnc="50" apn="pepper" type="default,supl" />
+ <apn carrier="Sure Mobile MMS" mcc="234" mnc="55" apn="MMS" mmsc="http://mmsc.gprs.cw.com/" mmsproxy="10.0.3.101" mmsport="80" type="mms" />
+ <apn carrier="Sure Mobile" mcc="234" mnc="55" apn="internet" type="default,supl" />
+ <apn carrier="Sure Picture Messaging" mcc="234" mnc="55" apn="mms" mmsc="http://mmsc.gprs.cw.com/" mmsproxy="10.0.3.101" mmsport="80" type="mms" />
+ <apn carrier="Manx Telecom" mcc="234" mnc="58" apn="3gpronto" proxy="195.010.099.046" port="8080" mmsc="http://mms.manxpronto.net:8002" type="default,supl,mms" />
+ <apn carrier="3G HSDPA" mcc="234" mnc="58" apn="3gpronto" type="default,supl" />
+ <apn carrier="Manx Telecom Contract MMS" mcc="234" mnc="58" apn="mms.manxpronto.net" user="mms" password="mms" mmsc="http://mms.manxpronto.net:8002" mmsproxy="195.10.99.46" mmsport="8080" type="mms" />
+ <apn carrier="Manx Telecom Prepay MMS" mcc="234" mnc="58" apn="mms.prontogo.net" user="mmsgo" password="mmsgo" mmsc="http://mms.manxpronto.net:8002" mmsproxy="195.10.99.41" mmsport="8080" type="mms" />
+ <apn carrier="Manx Telecom Contract WEB" mcc="234" mnc="58" apn="web.manxpronto.net" user="gprs" password="gprs" type="default,supl" />
+ <apn carrier="TDC Internet" mcc="238" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="TDC MMS" mcc="238" mnc="01" apn="mms" mmsc="http://mmsc.tdc.dk:8002" mmsproxy="194.182.251.15" mmsport="8080" type="mms" />
+ <apn carrier="TDC WAP" mcc="238" mnc="01" apn="wap" proxy="194.182.251.15" port="8080" type="default,supl" />
+ <apn carrier="Telenor Internet" mcc="238" mnc="02" apn="Internet" type="default,supl" />
+ <apn carrier="Bibob internet DK" mcc="238" mnc="02" apn="internet.bibob.dk" port="8080" type="default,supl,mms" />
+ <apn carrier="Telenor DK" mcc="238" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="Bibob MMS DK" mcc="238" mnc="02" apn="mms.bibob.dk" proxy="212.88.64.8" port="8080" mmsc="http://mms.telenor.dk" mmsport="8080" type="mms" />
+ <apn carrier="Telenor DK MMS" mcc="238" mnc="02" apn="telenor" user="telenor" password="telenor" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="9201" type="mms" />
+ <apn carrier="3 DK" mcc="238" mnc="06" apn="data.tre.dk" mmsc="http://mms.3.dk" mmsproxy="mmsproxy.3.dk" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="3 Danmark" mcc="238" mnc="06" apn="data.tre.dk" mmsc="http://mms.3.dk/" mmsproxy="172.16.1.25" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Telia DK" mcc="238" mnc="20" apn="www.internet.mtelia.dk" type="default,supl" />
+ <apn carrier="Telia DK MMS" mcc="238" mnc="20" apn="www.mms.mtelia.dk" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" />
+ <apn carrier="Telenor Internet" mcc="238" mnc="77" apn="Internet" type="default,supl" />
+ <apn carrier="Telenor MMS" mcc="238" mnc="77" apn="telenor" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms" />
+ <apn carrier="Halebop Internet" mcc="240" mnc="01" apn="halebop.telia.se" type="default,supl" />
+ <apn carrier="Halebop MMS" mcc="240" mnc="01" apn="mms.telia.se" user="mms" password="telia" mmsc="http://mmss/" mmsproxy="193.209.134.132" mmsport="8080" type="mms" />
+ <apn carrier="Telia SE MMS" mcc="240" mnc="01" apn="mms.telia.se" user="mms" server="" password="telia" mmsc="http://mmss/" mmsproxy="193.209.134.132" mmsport="80" type="mms"/>
+ <apn carrier="Telia SE" mcc="240" mnc="01" apn="online.telia.se" user="*" type="default,supl" />
+ <apn carrier="3 SE" mcc="240" mnc="02" apn="data.tre.se" type="default,supl,mms" />
+ <apn carrier="3 SE MMS" mcc="240" mnc="02" apn="data.tre.se" mmsc="http://mms.tre.se" mmsproxy="mmsproxy.tre.se" mmsport="8799" type="mms" />
+ <apn carrier="Telenor Mobilsurf" mcc="240" mnc="04" apn="services.telenor.se" proxy="172.30.253.241" port="8799" type="default,supl" />
+ <apn carrier="Telenor MMS" mcc="240" mnc="04" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="mms" />
+ <apn carrier="Telenor Mobilsurf" mcc="240" mnc="06" apn="services.telenor.se" proxy="173.30.253.241" port="8799" type="default,supl" />
+ <apn carrier="Telenor MMS" mcc="240" mnc="06" apn="services.telenor.se" mmsc="http://mms" mmsproxy="173.30.253.241" mmsport="8799" type="mms" />
+ <apn carrier="Tele2 SE" mcc="240" mnc="07" apn="internet.tele2.se" user="wap" password="wap" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.030" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Tele2" mcc="240" mnc="07" apn="internet.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Telenor SE" mcc="240" mnc="08" apn="internet.telenor.se" type="default,supl" />
+ <apn carrier="Telenor Mobilsurf" mcc="240" mnc="08" apn="services.telenor.se" proxy="172.30.253.241" port="8799" type="default,supl" />
+ <apn carrier="Telenor SE MMS" mcc="240" mnc="08" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="mms" />
+ <apn carrier="TelenorMobilsurf" mcc="240" mnc="09" apn="services.telenor.se" proxy="173.30.253.241" port="8799" type="default,supl" />
+ <apn carrier="Telenor MMS" mcc="240" mnc="09" apn="services.telenor.se" mmsc="http://mms" mmsproxy="173.30.253.241" mmsport="8799" type="mms" />
+ <apn carrier="Spring data" mcc="240" mnc="10" apn="data.springmobil.se" type="default,supl" />
+ <apn carrier="Spring MMS" mcc="240" mnc="10" apn="mms.springmobil.se" mmsc="http://mms.springmobil.se" mmsproxy="213.88.184.37" mmsport="8080" type="mms" />
+ <apn carrier="Ludo Internet" mcc="242" mnc="01" apn="internet.ventelo.no" type="default,supl" />
+ <apn carrier="Ludo MMS" mcc="242" mnc="01" apn="mms.ventelo.no" user="ventelo" password="1111" mmsc="http://mmsc/" mmsproxy="10.10.10.11" mmsport="8080" type="mms" />
+ <apn carrier="Telenor MMS" mcc="242" mnc="01" apn="mms" mmsc="http://mmsc/" mmsproxy="10.10.10.11" mmsport="8080" type="mms" />
+ <apn carrier="Mobitalk Internet" mcc="242" mnc="01" apn="telenor" user="dj" password="dj" proxy="10.10.10.10" port="8080" type="default,supl" />
+ <apn carrier="Talkmore" mcc="242" mnc="01" apn="telenor" port="default,supl" type="default,supl,mms" />
+ <apn carrier="Mobitalk MMS" mcc="242" mnc="01" apn="telenor" user="dj" password="dj" mmsc="http://mmsc/" mmsproxy="10.10.10.11" mmsport="8080" type="mms" />
+ <apn carrier="Netcom Internet" mcc="242" mnc="02" apn="internet.netcom.no" type="default,supl" />
+ <apn carrier="Chess MMS" mcc="242" mnc="02" apn="mms.netcom.no" user="chess" password="chess" mmsc="http://mms/" mmsproxy="193.209.134.133" mmsport="8080" type="mms" />
+ <apn carrier="Chess Internet" mcc="242" mnc="02" apn="netcom" user="chess" password="chess" proxy="10.254.254.10" port="8080" type="default,supl" />
+ <apn carrier="Tele2 NO Internet" mcc="242" mnc="03" apn="internet.tele2.no" type="default,supl" />
+ <apn carrier="Tele2 NO MMS" mcc="242" mnc="03" apn="mms.tele2.no" user="wap" password="wap" mmsc="mmsc.tele2.no" mmsproxy="192.12.40.14:8080" type="mms" />
+ <apn carrier="Tele2 MMS" mcc="242" mnc="04" apn="internet.tele2.no " mmsc="http://mmsc.tele2.no" mmsproxy="193.012.040.014" mmsport="8080" type="mms" />
+ <apn carrier="Tele2 Internett" mcc="242" mnc="04" apn="internet.tele2.no" type="default,supl" />
+ <apn carrier="NwN" mcc="242" mnc="05" apn="internet" type="default,supl" />
+ <apn carrier="NwN MMS" mcc="242" mnc="05" apn="mms" mmsc="http://mms.nwn.no" mmsproxy="188.149.250.10" mmsport="80" type="mms" />
+ <apn carrier="DNA Internet" mcc="244" mnc="03" apn="internet" type="default,supl" />
+ <apn carrier="DNA MMS" mcc="244" mnc="03" apn="mms" user="dna" password="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" />
+ <apn carrier="DNA Internet" mcc="244" mnc="04" apn="internet" type="default,supl" />
+ <apn carrier="DNA MMS" mcc="244" mnc="04" apn="mms" user="dna" password="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" />
+ <apn carrier="Elisa FI" mcc="244" mnc="05" apn="Internet" type="default,supl" />
+ <apn carrier="Elisa Internet" mcc="244" mnc="05" apn="internet" type="default,supl" />
+ <apn carrier="Elisa FIMMS" mcc="244" mnc="05" apn="mms" mmsc="http://mms.elisa.fi" mmsproxy="213.161.41.57" mmsport="80" type="mms" />
+ <apn carrier="TDC Internet" mcc="244" mnc="10" apn="internet.song.fi" user="song@internet" password="songnet" type="default,supl" />
+ <apn carrier="TDC MMS" mcc="244" mnc="10" apn="mms.song.fi" mmsc="http://mms.song.fi" mmsproxy="213.161.41.58" mmsport="80" type="mms" />
+ <apn carrier="DNA INTERNET" mcc="244" mnc="12" apn="Internet" type="default,supl" />
+ <apn carrier="DNA Internet" mcc="244" mnc="12" apn="internet" type="default,supl" />
+ <apn carrier="DNA MMS" mcc="244" mnc="12" apn="mms" user="dna" password="mms" mmsc="http://mmsc.dnafinland.fi" mmsproxy="10.1.1.2" mmsport="8080" type="mms" />
+ <apn carrier="DNA Internet" mcc="244" mnc="13" apn="internet" type="default,supl" />
+ <apn carrier="DNA MMS" mcc="244" mnc="13" apn="mms" user="dna" password="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" />
+ <apn carrier="Saunalahti" mcc="244" mnc="21" apn="internet.saunalahti" type="default,supl" />
+ <apn carrier="Saunalahti MMS" mcc="244" mnc="21" apn="mms.saunalahti.fi" mmsc="http://mms.saunalahti.fi:8002" mmsproxy="62.142.4.197" mmsport="8080" type="mms" />
+ <apn carrier="Sonera" mcc="244" mnc="91" apn="Internet" type="default,supl" />
+ <apn carrier="TeliaSonera Internet" mcc="244" mnc="91" apn="internet" type="default,supl" />
+ <apn carrier="Sonera MMS" mcc="244" mnc="91" apn="wap.sonera.net" mmsc="http://mms.sonera.fi:8002" mmsproxy="195.156.25.33" mmsport="8080" type="mms" />
+ <apn carrier="Omnitel MMS" mcc="246" mnc="01" apn="gprs.mms.lt" user="mms" password="mms" mmsc="http://mms.omnitel.net:8002/" mmsproxy="194.176.32.149" mmsport="8080" type="mms" />
+ <apn carrier="Omnitel" mcc="246" mnc="01" apn="gprs.startas.lt" user="omni" password="omni" type="default,supl" />
+ <apn carrier="Omnitel Internet" mcc="246" mnc="01" apn="omnitel" user="omni" password="omni" type="default,supl" />
+ <apn carrier="Bite LT Internet" mcc="246" mnc="02" apn="banga" type="default,supl" />
+ <apn carrier="Bite MMS" mcc="246" mnc="02" apn="mms" user="mms@mms" password="mms" mmsc="http://mmsc" mmsproxy="192.168.150.2" mmsport="8080" type="mms" />
+ <apn carrier="Bite " mcc="246" mnc="02" apn="wap" server="213.226.131.133" type="default,supl" />
+ <apn carrier="Tele2 Internet LT" mcc="246" mnc="03" apn="internet.tele2.lt" proxy="130.244.196.090" port="8080" type="default,supl" />
+ <apn carrier="Tele2 LT" mcc="246" mnc="03" apn="internet.vodafone.net" type="default,supl" />
+ <apn carrier="Tele2 MMS LT" mcc="246" mnc="03" apn="mms.tele2.lt" mmsc="http://mmsc.tele2.lt/" mmsproxy="193.012.040.029" mmsport="8080" type="mms" />
+ <apn carrier="Tele2 LT MMS" mcc="246" mnc="03" apn="wap.tele2.lt" mmsc="http://mmsc.tele2.lt" mmsproxy="193.12.40.29" mmsport="8080" type="mms" />
+ <apn carrier="LMT" mcc="247" mnc="01" apn="internet.lmt.lv" type="default,supl" />
+ <apn carrier="LMT MMS" mcc="247" mnc="01" apn="mms.lmt.lv" mmsproxy="212.93.97.201" type="mms" />
+ <apn carrier="Tele2 Internet LV" mcc="247" mnc="02" apn="internet.tele2.lv" user="wap" password="wap" proxy="130.244.196.090" port="8080" type="default,supl" />
+ <apn carrier="Tele2 MMS LV" mcc="247" mnc="02" apn="mms.tele2.lv" user="wap" password="wap" mmsc="http://mmsc.tele2.lv/" mmsproxy="193.012.040.038" mmsport="8080" type="mms" />
+ <apn carrier="Bite LV Internet" mcc="247" mnc="05" apn="internet" type="default,supl" />
+ <apn carrier="Bite MMS" mcc="247" mnc="05" apn="mms" mmsc="http://mmsc" mmsproxy="192.168.150.2" mmsport="8080" type="mms" />
+ <apn carrier="EMT" mcc="248" mnc="01" apn="internet.emt.ee" type="default,supl" />
+ <apn carrier="EMT MMS" mcc="248" mnc="01" apn="mms.emt.ee" mmsc="http://mms.emt.ee/servlets/mms" type="mms" />
+ <apn carrier="Elisa EE" mcc="248" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="Elisa EE MMS" mcc="248" mnc="02" apn="mms" mmsc="http://194.204.2.10" mmsproxy="194.204.2.6" mmsport="8080" type="mms" />
+ <apn carrier="Tele2 EE" mcc="248" mnc="03" apn="internet.tele2.ee" user="wap" password="wap" type="default,supl" />
+ <apn carrier="Tele2 EE MMS" mcc="248" mnc="03" apn="mms.emt.ee" mmsc="http://mms.emt.ee/servlets/mms" mmsproxy="217.71.32.82" mmsport="8080" type="mms" />
+ <apn carrier="Tele2 MMS" mcc="248" mnc="03" apn="mms.tele2.ee" mmsc="http://mmsc.tele2.ee" mmsproxy="193.12.040.006" mmsport="8080" type="mms" />
+ <apn carrier="MTS RU" mcc="250" mnc="01" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="ETK" mcc="250" mnc="01" apn="mms.etk.ru" user="mms" password="mms" mmsc="http://mmsc" mmsproxy="010.010.030.060" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="MTS RU MMS" mcc="250" mnc="01" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="Megafon Internet" mcc="250" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="Megafon MMS" mcc="250" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://mmsc:8002" mmsproxy="10.10.10.10" mmsport="8080" type="mms" />
+ <apn carrier="NCC" mcc="250" mnc="03" apn="mms" mmsc="http://10.0.3.50" mmsproxy="10.0.3.20" mmsport="8080" type="mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="04" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="04" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="ETK" mcc="250" mnc="05" apn="internet.etk.ru" type="default,supl,mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="05" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="05" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="internet" mcc="250" mnc="07" apn="internet.smarts.ru" user="any" password="any" type="default,supl" />
+ <apn carrier="mms" mcc="250" mnc="07" apn="mms.smarts.ru" user="wap" password="wap" mmsc="http://172.24.120.135/mms/wapenc" mmsproxy="172.24.128.5" mmsport="8080" type="mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="10" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="10" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="Beeline internet" mcc="250" mnc="11" apn="internet.beeline.ru" user="beeline" password="beeline" type="default,supl" />
+ <apn carrier="Beeline MMS" mcc="250" mnc="11" apn="mms.beeline.ru" user="beeline" password="beeline" mmsc="http://mms/" mmsproxy="192.168.094.023" mmsport="8080" type="mms" />
+ <apn carrier="GPRS-Internet" mcc="250" mnc="12" apn="inet.bwc.ru" user="bwc" password="bwc" type="default,supl" />
+ <apn carrier="BWC MMS" mcc="250" mnc="12" apn="mms.bwc.ru" user="bwc" password="bwc" mmsc="http://mmsc/mms" mmsproxy="10.10.17.2" mmsport="8080" type="mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="13" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="13" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="MMS" mcc="250" mnc="16" apn="mms.ntc" mmsc="http://mmsc.vntc.ru/was" mmsproxy="80.243.64.68" mmsport="8080" type="mms" />
+ <apn carrier="Internet" mcc="250" mnc="17" apn="internet.usi.ru" type="default,supl" />
+ <apn carrier="MMS" mcc="250" mnc="17" apn="mms.usi.ru" mmsc="http://mms" mmsproxy="192.168.168.192" mmsport="8080" type="mms" />
+ <apn carrier="Tele2 RU" mcc="250" mnc="20" apn="internet.tele2.ru" type="default,supl" />
+ <apn carrier="Tele2 RU MMS" mcc="250" mnc="20" apn="mms.tele2.ru" mmsc="http://mmsc.tele2.ru" mmsproxy="193.12.40.65" mmsport="8080" type="mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="39" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="39" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="Beeline internet" mcc="250" mnc="44" apn="internet.beeline.ru" user="beeline" password="beeline" type="default,supl" />
+ <apn carrier="Beeline MMS" mcc="250" mnc="44" apn="mms.beeline.ru" user="beeline" password="beeline" mmsc="http://mms/" mmsproxy="192.168.094.023" mmsport="8080" type="mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="92" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="92" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="МТС-интернет" mcc="250" mnc="93" apn="internet.mts.ru" user="mts" password="mts" type="default,supl" />
+ <apn carrier="МТС Центр MMS" mcc="250" mnc="93" apn="mms.mts.ru" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" />
+ <apn carrier="BeeLine RU" mcc="250" mnc="99" apn="internet.beeline.ru" user="beeline" password="beeline" type="default,supl" />
+ <apn carrier="BeeLine RU MMS" mcc="250" mnc="99" apn="mms.beeline.ru" user="beeline" password="beeline" mmsc="http://mms/" mmsproxy="192.168.094.023" mmsport="8080" type="mms" />
+ <apn carrier="MTS UA" mcc="255" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="MTS UA" mcc="255" mnc="01" apn="www.mts.com.ua" type="default,supl" />
+ <apn carrier="MTS UA" mcc="255" mnc="01" apn="active" type="default,supl" />
+ <apn carrier="MTS UA" mcc="255" mnc="01" apn="hyper.net" type="default,supl" />
+ <apn carrier="JEANS MMS" mcc="255" mnc="01" apn="mms.jeans.ua" mmsc="http://mmsc:8002" mmsproxy="192.168.10.10" mmsport="8080" type="mms" />
+ <apn carrier="MTS UA" mcc="255" mnc="01" apn="mms.umc.ua" mmsc="http://mmsc:8002/" mmsproxy="192.168.010.010" mmsport="8080" type="mms" />
+ <apn carrier="MTS-MMS" mcc="255" mnc="01" apn="mms" mmsc="http://mmsc:8002" mmsproxy="192.168.010.010" mmsport="8080" type="mms" />
+ <apn carrier="JEANS" mcc="255" mnc="01" apn="www.jeans.ua" type="default,supl" />
+ <apn carrier="MTS UA" mcc="255" mnc="01" apn="www.umc.ua" type="default,supl" />
+ <apn carrier="Beeline UA" mcc="255" mnc="02" apn="internet.beeeline.ua" type="default,supl" />
+ <apn carrier="Beeline-internet" mcc="255" mnc="02" apn="internet.beeline.ua" type="default,supl" />
+ <apn carrier="Beeline UA MMS" mcc="255" mnc="02" apn="mms.beeline.ua" mmsc="http://mms/" mmsproxy="10.11.8.18" mmsport="8080" type="mms" />
+ <apn carrier="Ace_Base MMS" mcc="255" mnc="03" apn="mms.kyivstar.net" user="mms" password="mms" mmsc="http://mms.kyivstar.net" mmsproxy="10.10.10.10" mmsport="8080" type="mms" />
+ <apn carrier="Ace_Base" mcc="255" mnc="03" apn="www.ab.kyivstar.net" type="default,supl" />
+ <apn carrier="Djuice EDGE" mcc="255" mnc="03" apn="www.djuice.com.ua" type="default,supl" />
+ <apn carrier="Kyivstar EDGE" mcc="255" mnc="03" apn="www.kyivstar.net" type="default,supl" />
+ <apn carrier="life" mcc="255" mnc="06" apn="internet" type="default,supl" />
+ <apn carrier="life MMS" mcc="255" mnc="06" apn="mms" mmsc="http://mms.life.com.ua/cmms/post" mmsproxy="212.58.162.230" mmsport="8080" type="mms" />
+ <apn carrier="Utel" mcc="255" mnc="07" apn="3g.utel.ua" mmsc="http://10.212.1.4/mms/wapenc" mmsproxy="10.212.3.148" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Velcom MMS" mcc="257" mnc="01" apn="mms.velcom.by" user="mms" password="mms" server="mms.velcom.by" mmsc="http://mms.velcom.by/servlets/mms" mmsproxy="10.200.15.15" mmsport="8080" type="mms" />
+ <apn carrier="Velcom BY // Web Plus" mcc="257" mnc="01" apn="plus.velcom.by" user="plus" password="plus" type="default,supl" />
+ <apn carrier="Velcom BY // Web 500" mcc="257" mnc="01" apn="vmi.velcom.by" user="vmi" password="vmi" type="default,supl" />
+ <apn carrier="Velcom Web" mcc="257" mnc="01" apn="web.velcom.by" user="web" password="web" type="default,supl" />
+ <apn carrier="Velcom BY // Web Basic" mcc="257" mnc="01" apn="web1.velcom.by" user="web1" password="web1" type="default,supl" />
+ <apn carrier="Velcom BY // Web 25" mcc="257" mnc="01" apn="web2.velcom.by" user="web2" password="web2" type="default,supl" />
+ <apn carrier="Velcom BY // Web 250" mcc="257" mnc="01" apn="web3.velcom.by" user="web3" password="web3" type="default,supl" />
+ <apn carrier="MTS BY" mcc="257" mnc="02" apn="mts" user="mts" password="mts" type="default,supl" />
+ <apn carrier="MTS BY MMS" mcc="257" mnc="02" apn="mts" user="mts" password="mts" mmsc="http://mmsc" mmsproxy="192.168.192.168" mmsport="8080" type="mms" />
+ <apn carrier="Life:) // Internet" mcc="257" mnc="04" apn="mms.life.com.by" type="default,supl" />
+ <apn carrier="Life:) // MMS" mcc="257" mnc="04" apn="mms.life.com.by" mmsc="http://mms.life.com.by/mmsc/" mmsproxy="10.10.10.20" mmsport="8080" type="mms" />
+ <apn carrier="GaduAIR" mcc="260" mnc="01" apn="internet.gadu-gadu.pl" type="default,supl" />
+ <apn carrier="PlusGSM" mcc="260" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="FM Group Mobile MMS" mcc="260" mnc="01" apn="mms.fmgmobile.pl" mmsc="http://mms.fmgmobile.pl:8002/" mmsproxy="212.002.096.016" mmsport="8080" type="mms" />
+ <apn carrier="GaduAIR MMS" mcc="260" mnc="01" apn="mms.gadu-gadu.pl" mmsc="http://mms.gadu-gadu.pl:8002/" mmsproxy="212.002.096.016" mmsport="8080" type="mms" />
+ <apn carrier="mBank mobile MMS" mcc="260" mnc="01" apn="mms.mobile.pl" user="true" password="true" mmsc="http://mms.mobile.pl:8080" mmsproxy="212.2.96.16" mmsport="8080" type="mms" />
+ <apn carrier="Carrefour Mova MMS" mcc="260" mnc="01" apn="mms.mova.pl" mmsc="http://mms.mova.pl:8002/" mmsproxy="212.002.096.016" mmsport="8080" type="mms" />
+ <apn carrier="Plus MMS" mcc="260" mnc="01" apn="mms.plusgsm.pl" mmsc="http://mms.plusgsm.pl:8002" mmsproxy="212.2.96.16" mmsport="8080" type="mms" />
+ <apn carrier="PlusGSM MMS" mcc="260" mnc="01" apn="mms" mmsc="http://mms.plusgsm.pl:8002" mmsproxy="212.002.096.016" mmsport="8080" type="mms" />
+ <apn carrier="FM Group Mobile" mcc="260" mnc="01" apn="www.fmgmobie.pl" type="default,supl" />
+ <apn carrier="mBank mobile" mcc="260" mnc="01" apn="www.mobile.pl" type="default,supl" />
+ <apn carrier="mBank mobile MMS" apn="mms.mobile.pl" mcc="260" mnc="01" user="" password="" mmsproxy="212.2.96.16" mmsport="8080" mmsc="http://mms.mobile.pl:8002" type="mms"/>
+ <apn carrier="Carrefour Mova" mcc="260" mnc="01" apn="www.mova.pl" type="default,supl" />
+ <apn carrier="Era Internet" mcc="260" mnc="02" apn="erainternet" user="erainternet" password="erainternet" server="*" type="default,supl" />
+ <apn carrier="Tak-Tak" mcc="260" mnc="02" apn="erainternettt" user="erainternet" password="erainternet" type="default,supl" />
+ <apn carrier="Era MMS" mcc="260" mnc="02" apn="eramms" user="eramms" password="eramms" server="*" mmsc="http://mms.era.pl/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms" />
+ <apn carrier="Heyah" mcc="260" mnc="02" apn="heyah.pl" user="heyah" password="heyah" type="default,supl" />
+ <apn carrier="Heyah MMS" mcc="260" mnc="02" apn="heyahmms" user="heyah" password="heyah" mmsc="http:/mms.heyah.pl/servlets/mms" mmsproxy="213.158.194.057" mmsport="8080" type="mms" />
+ <apn carrier="Mobilking MMS" mcc="260" mnc="02" apn="mmsMOBILKING" user="mobilking" password="mobilking" mmsc="http://mms.mobilking.pl/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms" />
+ <apn carrier="Mobilking" mcc="260" mnc="02" apn="wapMOBILKING" user="mobilking" password="mobilking" type="default,supl" />
+ <apn carrier="ASTER" mcc="260" mnc="03" apn="aster.internet" user="internet" password="internet" type="default,supl" />
+ <apn carrier="ASTER MMS" mcc="260" mnc="03" apn="aster.mms" user="mms" password="mms" mmsc="http://mms.aster.pl" mmsproxy="192.168.006.138" mmsport="8080" type="mms" />
+ <apn carrier="Orange PL" mcc="260" mnc="03" apn="internet" user="internet" password="internet" type="default,supl" />
+ <apn carrier="Orange PL MMS" mcc="260" mnc="03" apn="mms" user="mms" password="mms" mmsc="http://mms.orange.pl" mmsproxy="192.168.006.104" mmsport="8080" type="mms" />
+ <apn carrier="MNI" mcc="260" mnc="03" apn="mni.internet" user="mni.internet" password="mni.internet" type="default,supl" />
+ <apn carrier="MNI MMS" mcc="260" mnc="03" apn="mni.mms" user="mni.mms" password="mni.mms" mmsc="http://mms.mni.pl/" mmsproxy="192.168.006.135" mmsport="8080" type="mms" />
+ <apn carrier="Play" mcc="260" mnc="06" apn="internet" type="default,supl" />
+ <apn carrier="Play MMS" mcc="260" mnc="06" apn="mms" mmsc="http://10.10.28.164/mms/wapenc" mmsproxy="10.10.25.5" mmsport="8080" type="mms" />
+ <apn carrier="Cyfrowy Polsat" mcc="260" mnc="12" apn="internet.cyfrowypolsat.pl" type="default,supl" />
+ <apn carrier="Cyfrowy Polsat MMS" mcc="260" mnc="12" apn="mms.cyfrowypolsat.pl" mmsc="http://mms.cyfrowypolsat.pl:8002/" mmsproxy="79.171.2.33" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile DE" mcc="262" mnc="01" apn="internet.t-mobile" user="t-mobile" password="tm" server="*" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.028.023.131" mmsport="8008" type="default,supl,mms" />
+ <apn carrier="Vodafone DE-MMS" mcc="262" mnc="02" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
+ <apn carrier="Vodafone DE" mcc="262" mnc="02" apn="web.vodafone.de" user="none" password="none" type="default,supl" />
+ <apn carrier="blau DE" mcc="262" mnc="05" apn="internet.eplus.de" user="blau" password="blau" type="default,supl" />
+ <apn carrier="blau DE MMS" mcc="262" mnc="05" apn="mms.eplus.de" user="mms" password="eplus" mmsc="http://mms/eplus" mmsproxy="212.23.97.153" mmsport="5080" type="mms" />
+ <apn carrier="Vodafone DE-MMS" mcc="262" mnc="04" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
+ <apn carrier="Vodafone DE" mcc="262" mnc="04" apn="web.vodafone.de" type="default,supl" />
+ <apn carrier="E-Plus Web GPRS" mcc="262" mnc="03" apn="internet.eplus.de" user="eplus" password="internet" type="default,supl" />
+ <apn carrier="E-Plus MMS" mcc="262" mnc="03" apn="mms.eplus.de" user="mms" password="eplus" mmsc="http://mms/eplus/" mmsproxy="212.23.97.153" mmsport="5080" type="mms" />
+ <apn carrier="T-Mobile Internet" mcc="262" mnc="06" apn="internet.t-mobile" user="t-mobile" password="tm" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,supl,mms" />
+ <apn carrier="o2" mcc="262" mnc="07" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="O2 DE" mcc="262" mnc="07" apn="surfo2" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="o2" mcc="262" mnc="08" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Vodafone DE-MMS" mcc="262" mnc="09" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
+ <apn carrier="Vodafone DE" mcc="262" mnc="09" apn="web.vodafone.de" type="default,supl" />
+ <apn carrier="o2" mcc="262" mnc="11" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Vodafone PT Internet" mcc="268" mnc="01" apn="net2.vodafone.pt" user="vodafone" password="vodafone" server="*" type="default,supl" />
+ <apn carrier="Vodafone PT MMS" mcc="268" mnc="01" apn="vas.vodafone.pt" user="vas" password="vas" server="*" mmsc="http://mms/servlets/mms" mmsproxy="213.30.27.63" mmsport="8799" type="mms" />
+ <apn carrier="Optimus Internet" mcc="268" mnc="03" apn="umts" server="*" type="default,supl" />
+ <apn carrier="Optimus MMS" mcc="268" mnc="03" apn="mms" server="*" mmsc="http://mmsc:10021/mmsc" mmsproxy="62.169.66.5" mmsport="8799" type="mms" />
+ <apn carrier="TMN Internet" mcc="268" mnc="06" apn="internet" server="*" type="default,supl" />
+ <apn carrier="TMN MMS" mcc="268" mnc="06" apn="mmsc.tmn.pt" user="tmn" password="tmnnet" server="*" mmsc="http://mmsc" mmsproxy="10.111.2.16" mmsport="8080" type="mms" />
+ <apn carrier="Luxgsm Internet" mcc="270" mnc="01" apn="web.pt.lu" type="default,supl,mms" />
+ <apn carrier="Tango" mcc="270" mnc="77" apn="internet" type="default,supl" />
+ <apn carrier="Tango MMS" mcc="270" mnc="77" apn="mms" user="tango" password="tango" mmsc="http://mms.tango.lu" mmsproxy="212.66.75.3" mmsport="8080" type="mms" />
+ <apn carrier="Orange LU" mcc="270" mnc="99" apn="orange.lu" mmsc="http://mms.orange.lu" mmsproxy="212.088.139.44" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Vodafone IE-ISP" mcc="272" mnc="01" apn="isp.vodafone.ie" user="vodafone" password="vodafone" type="default,supl" />
+ <apn carrier="Vodafone IE" mcc="272" mnc="01" apn="live.vodafone.com" type="default,supl" />
+ <apn carrier="Vodafone IE-MMS" mcc="272" mnc="01" apn="mms.vodafone.net" mmsc="http://www.vodafone.ie/mms" mmsproxy="10.24.59.200" mmsport="80" type="mms" />
+ <apn carrier="O2 Ireland" mcc="272" mnc="02" apn="internet" mmsc="http://mmsc.mms.o2.ie:8002" mmsproxy="62.40.32.40" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="O2 IE" mcc="272" mnc="02" apn="wap.dol.ie" user="user" password="user" server="www.o2.ie" proxy="62.40.32.40" port="8080" mmsc="http://mmsc.mms.o2.ie:8002" mmsproxy="62.40.32.40" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Meteor Data" mcc="272" mnc="03" apn="data.mymeteor.ie" type="default,supl" />
+ <apn carrier="Meteor MMS" mcc="272" mnc="03" apn="mms.mymeteor.ie" user="my" password="wap" proxy="010.085.085.085" port="8799" mmsc="http://mms.mymeteor.ie" mmsproxy="010.085.085.085" mmsport="8799" type="mms" />
+ <apn carrier="Eircom/Meteor" mcc="272" mnc="03" apn="wap.mymeteor.ie" user="my" password="meteor" server="http://wap.mymeteor.ie" proxy="10.85.85.85" port="8799" mmsc="mms.mymeteor.ie" mmsproxy="10.85.85.85" mmsport="8799" type="default,supl" />
+ <apn carrier="Eircom/Meteor MMS" mcc="272" mnc="03" apn="wap.mymeteor.ie" user="my" password="meteor" server="http://wap.mymeteor.ie" proxy="10.85.85.85" port="8799" mmsc="http://mms.mymeteor.ie" mmsproxy="10.85.85.85" mmsport="8799" type="mms" />
+ <apn carrier="3 IE MMS" mcc="272" mnc="05" apn="3ireland.ie" server="3ireland.ie" mmsc="http://mms.um.3ireland.ie:10021/mmsc" mmsproxy="mms.3ireland.ie" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="3 Ireland" mcc="272" mnc="05" apn="3ireland.ie" mmsc="http://mms.um.3ireland.ie:10021/mmsc" mmsproxy="mms.3ireland.ie" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Siminn" mcc="274" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Siminn MMS" mcc="274" mnc="01" apn="mms.simi.is" mmsc="http://mms.simi.is/servlets/mms" mmsproxy="213.167.138.200" mmsport="9201" type="mms" />
+ <apn carrier="Vodafone Internet" mcc="274" mnc="02" apn="gprs.is" type="default,supl" />
+ <apn carrier="Vodafone MMS" mcc="274" mnc="02" apn="mms.gprs.is" mmsc="http://mmsc.vodafone.is" mmsproxy="10.22.0.10" mmsport="8080" type="mms" />
+ <apn carrier="MMS Nova" mcc="274" mnc="11" apn="mms.nova.is" mmsc="http://mmsc.nova.is" mmsproxy="10.10.2.60" mmsport="8080" type="mms" />
+ <apn carrier="Net Nova" mcc="274" mnc="11" apn="net.nova.is" type="default,supl" />
+ <apn carrier="Vodafone AL" mcc="276" mnc="02" apn="Twa" type="default,supl" />
+ <apn carrier="Vodafone AL MMS" mcc="276" mnc="02" apn="vfalmms" mmsc="http://mmsc.vodafone.al" mmsproxy="10.0.9.2" mmsport="8080" type="mms" />
+ <apn carrier="Cytamobile MMS" mcc="280" mnc="01" apn="cytamobile" user="user" password="pass" mmsc="http://mmsc.cyta.com.cy" mmsproxy="212.031.096.161" mmsport="9201" type="mms" />
+ <apn carrier="Cytamobile" mcc="280" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="MTN CY" mcc="280" mnc="10" apn="internet" user="wap" password="wap" type="default,supl" />
+ <apn carrier="MTN CY MMS" mcc="280" mnc="10" apn="mms" user="mms" password="mms" mmsc="http://mms.mtn.com.cy/mmsc" mmsproxy="172.24.97.1" mmsport="3130" type="mms" />
+ <apn carrier="Geocell" mcc="282" mnc="01" apn="internet" type="default,supl,mms" />
+ <apn carrier="Geocell Mms" mcc="282" mnc="01" apn="mms" mmsc="http://mms.geocell.com.ge/cmmsc/post" mmsproxy="010.011.240.007" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Beeline AM" mcc="283" mnc="01" apn="internet.beeline.am" user="internet" password="internet" type="default,supl" />
+ <apn carrier="BeeLine AM MMS" mcc="283" mnc="01" apn="mms.beeline.am" mmsc="http://mms/" mmsproxy="10.3.2.205" mmsport="8080" type="mms" />
+ <apn carrier="VivaCell" mcc="283" mnc="05" apn="connect.vivacell.am" type="default,supl" />
+ <apn carrier="VivaCell MMS" mcc="283" mnc="05" apn="mms.vivacell.am" mmsc="http://mms.vivacell.am/mmsc" mmsproxy="83.217.226.72" mmsport="8080" type="mms" />
+ <apn carrier="Orange AM" mcc="283" mnc="10" apn="internet" type="default,supl" />
+ <apn carrier="Orange AM MMS" mcc="283" mnc="10" apn="mms" mmsc="http://mms/" mmsproxy="192.168.220.251" mmsport="3128" type="mms" />
+ <apn carrier="MobiTel BG" mcc="284" mnc="01" apn="inet-gprs.mtel.bg" type="default,supl" />
+ <apn carrier="Mtel BG" mcc="284" mnc="01" apn="inet-gprs.mtel.bg" mmsc="http://mmsc/" mmsproxy="010.150.000.033" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="MobiTel BG MMS" mcc="284" mnc="01" apn="mms-gprs.mtel.bg" user="Mtel" password="Mtel" mmsc="http://mmsc/" mmsproxy="10.150.0.22" mmsport="9201" type="mms" />
+ <apn carrier="Vivatel" mcc="284" mnc="03" apn="internet.vivatel.bg" user="vivatel" mmsc="http://mmsc.vivatel.bg" mmsproxy="192.168.123.123" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Globul" mcc="284" mnc="05" apn="globul" user="globul" type="default,supl,mms" />
+ <apn carrier="Globul MMS" mcc="284" mnc="05" apn="mms.globul.bg" user="mms" mmsc="http://mmsc1.mms.globul.bg:8002" mmsproxy="192.168.087.011" mmsport="8004" type="mms" />
+ <apn carrier="Turkcell" mcc="286" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Turkcell MMS" mcc="286" mnc="01" apn="mms" user="mms" password="mms" mmsc="http://mms.turkcell.com.tr/servlets/mms" mmsproxy="212.252.169.217" mmsport="9201" type="mms" />
+ <apn carrier="Vodafone TR" mcc="286" mnc="02" apn="internet" user="vodafone" password="vodafone" type="default,supl" />
+ <apn carrier="Vodafone TR MMS" mcc="286" mnc="02" apn="mms" user="vodafone" password="vodafone" mmsc="http://217.31.233.18:6001/MM1Servlet" mmsproxy="217.31.233.18" mmsport="9201" type="mms" />
+ <apn carrier="AVEA" mcc="286" mnc="03" apn="internet" user="wap" password="wap" type="default,supl" />
+ <apn carrier="AVEA MMS" mcc="286" mnc="03" apn="mms" user="mms" password="mms" mmsc="http://mms.avea.com.tr/servlets/mms" mmsproxy="213.161.151.201" mmsport="8080" type="mms" />
+ <apn carrier="Tele" mcc="290" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Tele MMS" mcc="290" mnc="01" apn="mms" mmsc="http://mms.tele.gl/mms/wapenc" mmsproxy="10.112.222.37" mmsport="8080" type="mms" />
+ <apn carrier="Si.mobil Internet" mcc="293" mnc="40" apn="internet.simobil.si" user="simobil" password="internet" type="default,supl" />
+ <apn carrier="Si.mobil MMS" mcc="293" mnc="40" apn="mms.simobil.si" user="simobil" password="internet" mmsc="http://mmc" mmsproxy="80.95.224.46" mmsport="9201" type="mms" />
+ <apn carrier="Mobitel Internet" mcc="293" mnc="41" apn="internet" user="mobitel" password="internet" proxy="213.229.249.40" port="8080" type="default,supl,mms" />
+ <apn carrier="Mobitel MMS" mcc="293" mnc="41" apn="internet" user="mobitel" password="internet" mmsc="http://mms.mobitel.si/servlets/mms" mmsproxy="213.229.249.40" mmsport="8080" type="mms" />
+ <apn carrier="T-2 Internet" mcc="293" mnc="64" apn="internet.t-2.net" type="default,supl" />
+ <apn carrier="T-2 Mms" mcc="293" mnc="64" apn="mms.t-2.net" mmsc="http://www.mms.t-2.net:8002" mmsproxy="172.20.18.137" mmsport="8080" type="mms" />
+ <apn carrier="Tusmobil Internet" mcc="293" mnc="70" apn="internet.tusmobil.si" user="tusmobil" password="internet" type="default" />
+ <apn carrier="Tusmobil MMS" mcc="293" mnc="70" apn="mms.tusmobil.si" user="tusmobil" password="mms" mmsc="http://mms.tusmobil.si:8002" mmsproxy="091.185.221.085" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile MK" mcc="294" mnc="01" apn="internet" user="internet" password="t-mobile" type="default,supl" />
+ <apn carrier="T-Mobile MK MMS" mcc="294" mnc="01" apn="mms" user="mms" password="mms" mmsc="http://mms.t-mobile.com.mk" mmsproxy="62.162.155.227" mmsport="8080" type="mms" />
+ <apn carrier="ProMonte" mcc="297" mnc="01" apn="gprs.promonte.com" user="gprs" password="gprs" type="default,supl" />
+ <apn carrier="ProMonte MMS" mcc="297" mnc="01" apn="mms.promonte.com" user="mms" password="mms" mmsc=" http://mm.vor.promonte.com" mmsproxy="192.168.246.005" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile CG MMS" mcc="297" mnc="02" apn="mms" user="38267" password="38267" mmsc="http://192.168.180.100/servlets/mms" mmsproxy="10.0.5.19" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile CG" mcc="297" mnc="02" apn="tmcg-wnw" user="38267" password="38267" type="default,supl" />
+ <apn carrier="Telus SP" mcc="302" mnc="220" apn="sp.telus.com" mmsc="http://aliasredirect.net/proxy/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,supl,mms" />
+ <apn carrier="Mobilicity MMS" mcc="302" mnc="320" apn="mms.davewireless.com" mmsc="http://mms.mobilicity.net" mmsproxy="10.100.3.4" mmsport="8080" type="mms" />
+ <apn carrier="Mobilicity" mcc="302" mnc="320" apn="wap.davewireless.com" user="dave" password="password" type="default,supl" />
+ <apn carrier="Fido Default" mcc="302" mnc="370" apn="fido-core-appl1.apn" mmsc="http://mms.fido.ca" mmsproxy="205.151.11.13" mmsport="80" type="default,supl,mms" />
+ <apn carrier="Fido Internet" mcc="302" mnc="370" apn="internet.fido.ca" type="default,supl" />
+ <apn carrier="Fido Tethering" mcc="302" mnc="370" apn="isp.fido.apn" type="default,supl" />
+ <apn carrier="Wind CA" mcc="302" mnc="490" apn="internet.windmobile.ca" type="default,supl" />
+ <apn carrier="Wind CA MMS" mcc="302" mnc="490" apn="mms.windmobile.ca" mmsc="http://mms.windmobile.ca" mmsproxy="74.115.197.70" mmsport="8080" type="mms" />
+ <apn carrier="Bell" mcc="302" mnc="610" apn="pda.bell.ca" proxy="web.wireless.bell.ca" port="80" mmsc="http://mms.bell.ca/mms/wapenc" mmsproxy="web.wireless.bell.ca" mmsport="80" type="" />
+ <apn carrier="Bell Internet" mcc="302" mnc="610" apn="pda.bell.ca" mmsc="http://mms.bell.ca/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="Rogers #1" mcc="302" mnc="720" apn="internet.com" password="wap" type="default,supl,mms" />
+ <apn carrier="Rogers Tethering" mcc="302" mnc="720" apn="isp.apn" type="default,supl" />
+ <apn carrier="Rogers" mcc="302" mnc="720" apn="rogers-core-appl1.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="10.128.1.69" mmsport="80" type="default,supl,mms" />
+ <apn carrier="Rogers MMS" mcc="302" mnc="720" apn="rogers-core-appl1.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="10.128.1.69" mmsport="80" type="mms" />
+ <apn carrier="Rogers #2" mcc="302" mnc="720" apn="rogers-core-appl1.apn" type="default,supl,mms" />
+ <apn carrier="Rogers #1" mcc="302" mnc="72" apn="internet.com" password="wap" type="default,supl,mms" />
+ <apn carrier="Rogers MMS" mcc="302" mnc="72" apn="rogers-core-appl1.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="10.128.1.69" mmsport="80" type="mms" />
+ <apn carrier="Verizon" mcc="310" mnc="004" apn="internet" user="*" password="*" server="*" mmsc="http://mms.vtext.com/servlets/mms" type="default,supl,mms" />
+ <apn carrier="Cellular South" mcc="310" mnc="023" apn="internet" mmsc="http://pix.cellularsouth.com/servlets/mms" authtype="3" port="" mmsport="" type="mms" />
+ <apn carrier="metropcs" mcc="310" mnc="027" apn="wap.metropcs.net" user="MDN@mymetropcs.com" password="metropcs" server="http://mms.metropcs.net/servlets/mmsc" mmsc="http://mms.metropcs.net/mmsc" mmsport="3128" type="default,supl,mms" />
+ <apn carrier="myBlue Pix" mcc="310" mnc="030" apn="mmswap.centennialwireless.com" mmsc="http://mms.myblue.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms" />
+ <apn carrier="Internet" mcc="310" mnc="030" apn="private.centennialwireless.com" user="privuser" password="priv" type="default,supl" />
+ <apn carrier="CorrMMS" mcc="310" mnc="080" apn="corrmms" mmsc="http://mms.iot1.com/corr/mms.php" mmsproxy="66.255.55.23" mmsport="80" type="mms" />
+ <apn carrier="Internet" mcc="310" mnc="090" apn="isp" type="default,supl" />
+ <apn carrier="MMS" mcc="310" mnc="090" apn="mms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms" />
+ <apn carrier="Edge MMS Prepay" mcc="310" mnc="090" apn="ppmms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms" />
+ <apn carrier="PLAT-OTA-MMS" mcc="310" mnc="100" apn="plateaumms" password="mmsc" mmsc="208.254.124.11:8514" mmsproxy="208.254.124.11" mmsport="8080" type="mms" />
+ <apn carrier="PLATWEB" mcc="310" mnc="100" apn="plateauweb" type="default,supl" />
+ <apn carrier="CDMA" mcc="310" mnc="120" apn="0" type="default,supl" />
+ <apn carrier="CDMA" mcc="310" mnc="120" apn="1" mmsc="http://mms.sprintpcs.com" type="default,supl" />
+ <apn carrier="USCC" mcc="310" mnc="120" apn="internet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" authtype="3" port="80" mmsport="80" type="mms" />
+ <apn carrier="Virgin Mobile US" mcc="200" mnc="053" apn="0" port="" mmsproxy="205.239.233.136" mmsport="81" mmsc="http://mmsc.vmobl.com:8088/mms?" type="mms" />
+ <apn carrier="My Multi Media" mcc="310" mnc="130" apn="mms.c1.ama" user="cell1mms" password="cell1" mmsc="http://mms.iot1.com/amarillo/mms.php" type="mms" />
+ <apn carrier="T-Mobile US 160" mcc="310" mnc="160" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="DataConnect" mcc="310" mnc="170" apn="isp.cingular" type="default,supl" />
+ <apn carrier="Cingular MMS" mcc="310" mnc="170" apn="wap.cingular" user="WAP@CINGULARGPRS.COM" password="CINGULAR1" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile US 200" mcc="310" mnc="200" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 210" mcc="310" mnc="210" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 220" mcc="310" mnc="220" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 230" mcc="310" mnc="230" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 240" mcc="310" mnc="240" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 250" mcc="310" mnc="250" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US" mcc="310" mnc="260" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="Simple" mcc="310" mnc="260" apn="simple" proxy="216.155.165.050" port="8080" mmsc="http://smpl.mms.msg.eng.t-mobile.com/mms/wapenc" mmsproxy="216.155.165.050" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 270" mcc="310" mnc="270" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 310" mcc="310" mnc="310" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="Cingular 380 ATT" mcc="310" mnc="380" apn="proxy" proxy="wireless.cingular.com" port="80" mmsc="http://mmsc.cingular.com/" mmsproxy="wireless.cingular.com" type="default,supl,mms" />
+ <apn carrier="AWS MMS" mcc="310" mnc="380" apn="proxy" mmsc="http://mmsc.mymmode.com" mmsproxy="10.250.250.55" mmsport="8080" type="mms" />
+ <apn carrier="Celloneet MMS" mcc="310" mnc="390" apn="mms.celloneet.com" user="user1@mms.celloneet.com" password="celloneet" mmsc="http://mms.celloneet.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms" />
+ <apn carrier="ATT" mcc="310" mnc="410" apn="wap.cingular" user="WAP@CINGULARGPRS.COM" mmsc="http://mmsc.cingular.com" mmsproxy="wireless.cingular.com" mmsport="80" type="default,supl,mms" />
+ <apn carrier="CBW Internet" apn="wap.gocbw.com" proxy="" port="" user="cbw" password="" server="" mmsc="http://mms.gocbw.com:8088/mms" mmsproxy="216.68.79.202" mmsport="80" mcc="310" mnc="420" type="default,supl,mms" />
+ <apn carrier="DataConnect" mcc="310" mnc="470" apn="isp.cingular" type="default,supl" />
+ <apn carrier="MediaNet" mcc="310" mnc="470" apn="wap.cingular" user="WAP@CINGULARGPRS.COM" password="CINGULAR1" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="DataConnect" mcc="310" mnc="480" apn="isp.cingular" type="default,supl" />
+ <apn carrier="MediaNet" mcc="310" mnc="480" apn="wap.cingular" user="WAP@CINGULARGPRS.COM" password="CINGULAR1" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="T-Mobile US 490" mcc="310" mnc="490" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="GoodCall Picture Message" mcc="310" mnc="490" apn="good.call" mmsc="http://mms.suncom.net:8088/mms" mmsproxy="66.150.33.125" mmsport="8080" type="mms" />
+ <apn carrier="Suncom MMS" mcc="310" mnc="490" apn="mms" mmsc="http://mms.suncom.net:8088/mms" mmsproxy="66.150.33.125" mmsport="8080" type="mms" />
+ <apn carrier="DobsonMMS" mcc="310" mnc="560" apn="dobsoncellularwap" mmsc="http://mmsc" mmsproxy="172.23.1.252" mmsport="8799" type="mms" />
+ <apn carrier="ChinookMMS" mcc="310" mnc="570" apn="wapgw.chinookwireless.net" mmsc="http://mms.cellonenation.net/mms/" mmsproxy="204.181.155.195" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile US 580" mcc="310" mnc="580" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="CellularOne MMS" mcc="310" mnc="590" apn="cellular1wap" mmsc="http://mmsc" mmsproxy="172.23.1.252" mmsport="8799" type="mms" />
+ <apn carrier="EpicINT" mcc="310" mnc="610" apn="internet.epictouch" type="default,supl" />
+ <apn carrier="EpicMMS" mcc="310" mnc="610" apn="mms.epictouch" mmsc="http://mmsc.westlinkcom.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms" />
+ <apn carrier="T-Mobile US 660" mcc="310" mnc="660" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="iWireless" mcc="310" mnc="770" apn="i2.iwireless.com" type="default,supl" />
+ <apn carrier="iWireless MMS" mcc="310" mnc="770" apn="wap1.iwireless.com" mmsc="http://mmsc.iwireless.dataonair.net:6672" mmsproxy="209.4.229.32" mmsport="9201" type="mms" />
+ <apn carrier="PIAPicture Messaging" mcc="310" mnc="770" apn="wap9.iwireless.com" mmsc="http://mmsc.iwireless.dataonair.net:6672" mmsproxy="209.4.229.32" mmsport="9401" type="mms" />
+ <apn carrier="T-Mobile US 800" mcc="310" mnc="800" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
+ <apn carrier="Internet" mcc="310" mnc="840" apn="isp" type="default,supl" />
+ <apn carrier="MMS" mcc="310" mnc="840" apn="mms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms" />
+ <apn carrier="Edge MMS Prepay" mcc="310" mnc="840" apn="ppmms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms" />
+ <apn carrier="DTC MMS" mcc="310" mnc="880" apn="mms.adv.com" mmsc="http://mms.iot1.com/advantage/mms.php" type="mms" />
+ <apn carrier="WOW_WAP" mcc="310" mnc="910" apn="wap.firstcellular.com" mmsc="mms.firstcellular.net/mmsc" mmsproxy="10.101.1.5" mmsport="3128" type="default,supl,mms" />
+ <apn carrier="MMS" mcc="311" mnc="190" apn="wap.cellular1.net" mmsc="http://mms.cellular1.net/ecit/mms.php" type="mms" />
+ <apn carrier="Farmers" mcc="311" mnc="210" apn="internet.farmerswireless.com" type="default,supl" />
+ <apn carrier="Farmers MMS" mcc="311" mnc="210" apn="mms.farmers.com" mmsc="172.16.0.37:8514" type="mms" />
+ <apn carrier="GCI Data" mcc="311" mnc="370" apn="web.gci" type="default,supl" />
+ <apn carrier="GCI MMS" mcc="311" mnc="370" apn="mms.gci" mmsproxy="209.4.229.92" mmsport="9201" mmsc="http://mmsc.gci.csky.us:6672" type="mms" />
+ <apn carrier="Videotron" mcc="302" mnc="500" apn="media.videotron" type="default,supl" />
+ <apn carrier="Videotron MMS" mcc="302" mnc="500" apn="media.videotron" mmsc="http://media.videotron.com/" mmsproxy="10.208.89.17" mmsport="8080" type="mms" />
+ <apn carrier="Claro PR" mcc="330" mnc="11" apn="internet.claropr.com" port="8080" type="default,supl" />
+ <apn carrier="Claro PR MMS" mcc="330" mnc="11" apn="mms.claropr.com" mmsc="http://mmsg.claropr.com:1021/mmsc" mmsproxy="10.50.38.3" mmsport="8799" type="mms" />
+ <apn carrier="Telcel EDGE" mcc="334" mnc="020" apn="internet.itelcel.com" user="webgprs" password="webgprs2002" type="default,supl" />
+ <apn carrier="Telcel MMS" mcc="334" mnc="020" apn="mms.itelcel.com" user="mmsgprs" password="mmsgprs2003" mmsc="http://mms.itelcel.com/servlets/mms" mmsproxy="148.233.151.240" mmsport="8080" type="mms" />
+ <apn carrier="Telcel Internet" mcc="334" mnc="02" apn="internet.itelcel.com" user="webgprs" password="webgprs2002" type="default,supl" />
+ <apn carrier="Mensajas Multimedia" mcc="334" mnc="02" apn="mms.itelcel.com" user="mmsgprs" password="mmsgprs2003" mmsc="http://mms.itelcel.com/servlets/mms" mmsproxy="148.233.151.240" mmsport="8080" type="mms" />
+ <apn carrier="Movistar MX" mcc="334" mnc="03" apn="internet.movistar.mx" user="movistar" password="movistar" type="default,supl" />
+ <apn carrier="Movistar MX MMS" mcc="334" mnc="03" apn="mms.movistar.mx" user="movistar" password="movistar" mmsc="http://mms.movistar.mx" mmsproxy="10.2.20.1" mmsport="9201" type="mms" />
+ <apn carrier="Digicel JM" mcc="338" mnc="50" apn="wap.digiceljamaica.com" type="default,supl" />
+ <apn carrier="Digicel JM MMS" mcc="338" mnc="50" apn="wap.digiceljamaica.com" user="wapuser" password="wap03jam" mmsc="http://mms.digicelgroup.com" mmsproxy="172.016.007.012" mmsport="8080" type="mms" />
+ <apn carrier="Digicel BM" mcc="338" mnc="50" apn="web.digicelbermuda.com" type="default,supl" />
+ <apn carrier="Claro JM" mcc="338" mnc="70" apn="internet.ideasclaro.com.jm" port="8080" type="default,supl" />
+ <apn carrier="Orange GP MMS" mcc="340" mnc="01" apn="orangewap" user="orange" password="orange" mmsc="http://193.251.160.246/servlets/mms" mmsproxy="10.0.0.10" mmsport="8082" type="mms" />
+ <apn carrier="Orange GP" mcc="340" mnc="01" apn="orangeweb" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Digicel BB MMS" mcc="342" mnc="750" apn="wap.digicelbarbados.com" user="wapbarb" password="wap03barb" mmsc="http://mme.digiceljamaica.com/servlets/mms" mmsproxy="172.016.007.012" mmsport="8080" type="mms" />
+ <apn carrier="Digicel BB" mcc="342" mnc="750" apn="web.digicelbarbados.com" type="default,supl" />
+ <apn carrier="LIME" mcc="344" mnc="920" apn="internet" type="default,supl" />
+ <apn carrier="Digicel VC" mcc="360" mnc="070" apn="wap.digiceloecs.com" user="wapoecs" password="wap03oecs" type="default,supl" />
+ <apn carrier="Setar MMS" mcc="363" mnc="01" apn="mms.setar.aw" mmsc="http://mms.setar.aw" mmsproxy="209.88.130.210" mmsport="8081" type="mms" />
+ <apn carrier="Setar" mcc="363" mnc="01" apn="wap.setar.aw" type="default,supl" />
+ <apn carrier="BATELCO BS" mcc="364" mnc="390" apn="internet.btcbahamas.com" type="default,supl" />
+ <apn carrier="Orange DO" mcc="370" mnc="01" apn="orangenet.com.do" type="default,supl" />
+ <apn carrier="Orange DO MMS" mcc="370" mnc="01" apn="orangeworld" mmsc="http://mmr.orangewi.com/servlets/mms" mmsproxy="172.16.126.70" mmsport="8080" type="mms" />
+ <apn carrier="Azercell" mcc="400" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Azercell MMS" mcc="400" mnc="01" apn="mms" mmsc="http://mms.azercell.com/cMMSC/post" mmsproxy="10.0.154.101" mmsport="8080" type="mms" />
+ <apn carrier="Bakcell" mcc="400" mnc="02" apn="mms" mmsc="http://mms.bakcell.com/mms/wapenc" mmsproxy="213.172.091.046" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Nar" mcc="400" mnc="04" apn="nar" user="nar" password="nar" mmsc="http://mmsc" mmsproxy="10.20.0.40" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="BeeLine KZ" mcc="401" mnc="01" apn="internet.beeline.kz" user="internet.beeline" type="default,supl" />
+ <apn carrier="Kcell" mcc="401" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="Kcell MMS" mcc="401" mnc="02" apn="mms" mmsc="http://mms.kcell.kz/post" mmsproxy="195.047.255.007" mmsport="8080" type="mms" />
+ <apn carrier="RCOM" mcc="404" mnc="013" apn="rcomnet" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="01" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="01" apn="www" type="default,supl" />
+ <apn carrier="Airtel" mcc="404" mnc="02" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="03" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="IDEA" mcc="404" mnc="04" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="04" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="05" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="05" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="07" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="07" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="09" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="09" apn="rcomnet" type="default,supl" />
+ <apn carrier="Airtel" mcc="404" mnc="10" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="11" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="11" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="12" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="12" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="13" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="13" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="14" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="14" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="SPICE" mcc="404" mnc="14" apn="spicegprs" type="default,supl" />
+ <apn carrier="SPICE MMS" mcc="404" mnc="14" apn="spicemms" user="User Mobile number" password="spice" mmsc="http://10.200.200.3:8514" mmsproxy="10.200.200.3" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="15" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="15" apn="www" type="default,supl" />
+ <apn carrier="Airtel" mcc="404" mnc="16" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Aircel" mcc="404" mnc="17" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="17" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="18" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="18" apn="rcomnet" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="19" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="19" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="20" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="20" apn="www" type="default,supl" />
+ <apn carrier="BPL MMS" mcc="404" mnc="21" apn="mizone" user="MSISDN" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" type="mms" />
+ <apn carrier="BPL" mcc="404" mnc="21" apn="www" user="MSISDN" password="bplmmsc" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="22" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="22" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="404" mnc="24" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="24" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Aircel" mcc="404" mnc="25" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="25" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="BPL MMS" mcc="404" mnc="27" apn="mizone" user="MSISDN" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" type="mms" />
+ <apn carrier="BPL" mcc="404" mnc="27" apn="www" user="MSISDN" password="bplmmsc" type="default,supl" />
+ <apn carrier="Aircel" mcc="404" mnc="28" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="28" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="404" mnc="29" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="29" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="30" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="30" apn="www" type="default,supl" />
+ <apn carrier="Airtel" mcc="404" mnc="31" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Aircel" mcc="404" mnc="33" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="33" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="34" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="34" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="Aircel" mcc="404" mnc="35" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="35" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="36" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="36" apn="rcomnet" type="default,supl" />
+ <apn carrier="Aircel" mcc="404" mnc="37" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="37" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="38" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="38" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="Airtel" mcc="404" mnc="40" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Aircel" mcc="404" mnc="41" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="41" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="404" mnc="42" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="42" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="BPL MMS" mcc="404" mnc="43" apn="mizone" user="MSISDN" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" type="mms" />
+ <apn carrier="BPL" mcc="404" mnc="43" apn="www" user="MSISDN" password="bplmmsc" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="44" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="44" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="SPICE" mcc="404" mnc="44" apn="spicegprs" type="default,supl" />
+ <apn carrier="SPICE MMS" mcc="404" mnc="44" apn="spicemms" user="User Mobile number" password="spice" mmsc="http://10.200.200.3:8514" mmsproxy="10.200.200.3" mmsport="8080" type="mms" />
+ <apn carrier="Airtel" mcc="404" mnc="45" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="BPL MMS" mcc="404" mnc="46" apn="mizone" user="MSISDN" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" type="mms" />
+ <apn carrier="BPL" mcc="404" mnc="46" apn="www" user="MSISDN" password="bplmmsc" type="default,supl" />
+ <apn carrier="Airtel" mcc="404" mnc="49" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="50" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="50" apn="rcomnet" type="default,supl" />
+ <apn carrier="BSNL" mcc="404" mnc="51" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="51" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="52" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="52" apn="rcomnet" type="default,supl" />
+ <apn carrier="BSNL" mcc="404" mnc="53" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="53" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="54" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="54" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="55" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="55" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="404" mnc="56" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="56" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="57" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="57" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="58" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="58" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="59" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="59" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="60" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="60" apn="www" type="default,supl" />
+ <apn carrier="BSNL" mcc="404" mnc="62" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="62" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="64" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="64" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="66" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="66" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="67" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="67" apn="rcomnet" type="default,supl" />
+ <apn carrier="MTNL Delhi Postpaid" mcc="404" mnc="69" apn="gprsmtnldel" user="mtnl" password="mtnl123" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="9201" type="default,supl,mms" />
+ <apn carrier="MTNL Mumbai Postpaid" mcc="404" mnc="69" apn="gprsmtnlmum" user="mtnl" password="mtnl123" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="9401" type="default,supl,mms" />
+ <apn carrier="MTNL Delhi Prepaid" mcc="404" mnc="69" apn="gprsppsdel" user="mtnl" password="mtnl123" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="9201" type="default,supl,mms" />
+ <apn carrier="MTNL Mumbai Prepaid" mcc="404" mnc="69" apn="gprsppsmum" user="mtnl" password="mtnl123" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="9401" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="70" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="BSNL" mcc="404" mnc="71" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="71" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="72" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="72" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="73" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="73" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="74" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="74" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="751" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="75" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="75" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="76" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="76" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="77" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="77" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="404" mnc="78" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="78" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="80" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="80" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="BSNL" mcc="404" mnc="81" apn="bsnlnet" user="MSISDN" password="MSISDN" type="default,supl" />
+ <apn carrier="BSNL MMS" mcc="404" mnc="81" apn="mmssouth.cellone.in" user="MSISDN" password="mmsc" mmsc="http://10.7.236.11:8514" mmsproxy="10.7.236.11" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="404" mnc="82" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="82" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="83" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="83" apn="rcomnet" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="84" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="84" apn="www" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="404" mnc="85" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="404" mnc="85" apn="rcomnet" type="default,supl" />
+ <apn carrier="India Hutch" mcc="404" mnc="86" apn="portalnmms" proxy="10.10.1.100" port="9401" mmsc="http://mms1.hutchworld.co.in/mms/" type="default,supl,mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="86" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="86" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="87" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="87" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="404" mnc="88" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="404" mnc="88" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="404" mnc="89" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="404" mnc="89" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Airtel" mcc="404" mnc="90" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Aircel" mcc="404" mnc="91" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="404" mnc="91" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Airtel" mcc="404" mnc="92" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="93" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="94" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="95" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="96" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="97" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="404" mnc="98" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="01" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="01" apn="rcomnet" type="default,supl" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="025" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="025" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="026" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="026" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="027" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="027" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="029" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="029" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="030" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="030" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="031" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="031" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="032" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="032" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="033" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="033" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="034" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="034" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="035" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="035" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="036" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="036" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="037" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="037" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="038" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="038" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="039" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="039" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="03" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="03" apn="rcomnet" type="default,supl" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="040" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="040" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="041" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="041" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="042" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="042" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="043" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="043" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="044" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="044" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="045" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="045" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="046" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="046" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="TA TA DoCoMo" mcc="405" mnc="047" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
+ <apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="047" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="05" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="05" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="06" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="06" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="07" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="07" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="08" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="08" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="09" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="09" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="10" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="10" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="11" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="11" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="12" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="12" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="13" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="13" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="14" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="14" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="15" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="15" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="17" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="17" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="18" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="18" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="19" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="19" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="20" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="20" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="21" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="21" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="22" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="22" apn="rcomnet" type="default,supl" />
+ <apn carrier="Reliance MMS" mcc="405" mnc="23" apn="rcommms" mmsc="http://mms.rcom.co.in:6081/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
+ <apn carrier="Reliance" mcc="405" mnc="23" apn="rcomnet" type="default,supl" />
+ <apn carrier="Airtel" mcc="405" mnc="51" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="405" mnc="52" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="405" mnc="53" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="405" mnc="54" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="405" mnc="55" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Airtel" mcc="405" mnc="56" apn="airtelgprs.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="66" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="66" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="67" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="67" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="405" mnc="70" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="70" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="750" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="750" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="751" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="752" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="752" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="753" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="753" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="754" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="754" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="755" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="755" apn="www" type="default,supl" />
+ <apn carrier="Vodafone IN MMS" mcc="405" mnc="756" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
+ <apn carrier="Vodafone IN" mcc="405" mnc="756" apn="www" type="default,supl" />
+ <apn carrier="IDEA" mcc="405" mnc="799" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="799" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="800" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="800" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="801" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="801" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="802" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="802" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="803" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="803" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="804" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="804" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="805" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="805" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="807" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="807" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="808" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="808" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="809" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="809" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="810" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="810" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="811" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="811" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="Aircel" mcc="405" mnc="812" apn="aircelgprs" type="default,supl" />
+ <apn carrier="Aircel MMS" mcc="405" mnc="812" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="845" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="845" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="846" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="846" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="847" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="847" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="848" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="848" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="849" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="849" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="850" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="850" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="851" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="851" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="852" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="852" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="IDEA" mcc="405" mnc="853" apn="internet" type="default,supl" />
+ <apn carrier="IDEA MMS" mcc="405" mnc="853" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
+ <apn carrier="SPICE" mcc="405" mnc="908" apn="spicegprs" type="default,supl" />
+ <apn carrier="SPICE MMS" mcc="405" mnc="908" apn="spicemms" user="User Mobile number" password="spice" mmsc="http://10.200.200.3:8514" mmsproxy="10.200.200.3" mmsport="8080" type="mms" />
+ <apn carrier="SPICE" mcc="405" mnc="909" apn="spicegprs" type="default,supl" />
+ <apn carrier="SPICE MMS" mcc="405" mnc="909" apn="spicemms" user="User Mobile number" password="spice" mmsc="http://10.200.200.3:8514" mmsproxy="10.200.200.3" mmsport="8080" type="mms" />
+ <apn carrier="SPICE" mcc="405" mnc="910" apn="spicegprs" type="default,supl" />
+ <apn carrier="SPICE MMS" mcc="405" mnc="910" apn="spicemms" user="User Mobile number" password="spice" mmsc="http://10.200.200.3:8514" mmsproxy="10.200.200.3" mmsport="8080" type="mms" />
+ <apn carrier="SPICE" mcc="405" mnc="911" apn="spicegprs" type="default,supl" />
+ <apn carrier="SPICE MMS" mcc="405" mnc="911" apn="spicemms" user="User Mobile number" password="spice" mmsc="http://10.200.200.3:8514" mmsproxy="10.200.200.3" mmsport="8080" type="mms" />
+ <apn carrier="Mobilink" mcc="410" mnc="01" apn="connect.mobilinkworld.com" type="default,supl" />
+ <apn carrier="Mobilink MMS" mcc="410" mnc="01" apn="mms.mobilinkworld.com" user="mobilink" password="mobilink" mmsc="http://mms" mmsproxy="172.025.020.012" mmsport="8080" type="mms" />
+ <apn carrier="Ufone MMS" mcc="410" mnc="03" apn="ufone.mms" mmsc="http://www.ufone.com" mmsproxy="172.16.13.27" mmsport="8080" type="mms" />
+ <apn carrier="Ufone" mcc="410" mnc="03" apn="ufone.pinternet" type="default,supl" />
+ <apn carrier="Zong" mcc="410" mnc="04" apn="zonginternet" type="default,supl" />
+ <apn carrier="Zong MMS" mcc="410" mnc="04" apn="zongmms" mmsc="10.81.6.11" mmsproxy="10.81.6.11" mmsport="8080" type="mms" />
+ <apn carrier="Telenor PK" mcc="410" mnc="06" apn="internet" user="Telenor" password="Telenor" type="default,supl" />
+ <apn carrier="Telenor PK MMS" mcc="410" mnc="06" apn="mms" user="Telenor" password="Telenor" mmsc="http://mmstelenor" mmsproxy="172.18.19.11" mmsport="8080" type="mms" />
+ <apn carrier="Warid PK MMS" mcc="410" mnc="07" apn="mms.warid" mmsc="http://10.4.0.132/servlets/MMS" mmsproxy="010.004.002.001" mmsport="8080" type="mms" />
+ <apn carrier="Warid PK" mcc="410" mnc="07" apn="warid" type="default,supl" />
+ <apn carrier="Dialog Mobile Broadband" mcc="413" mnc="02" apn="dialogbb" server="dialog" type="default,supl,mms" />
+ <apn carrier="Alfa" mcc="415" mnc="01" apn="internet.mic1.com.lb" user="mic1" password="mic1" type="default,supl" />
+ <apn carrier="Alfa MMS" mcc="415" mnc="01" apn="mms.mic1.com.lb" user="mic1" password="mic1" mmsc="http://mms.mic1.com.lb" mmsproxy="192.168.23.51" mmsport="9201" type="mms" />
+ <apn carrier="Alfa WAP" mcc="415" mnc="01" apn="wap.mic1.com.lb" user="mic1" password="mic1" proxy="192.168.023.050" port="80" type="default,supl" />
+ <apn carrier="mtc touch" mcc="415" mnc="03" apn="gprs.mtctouch.com.lb" type="default,supl" />
+ <apn carrier="Alfa MMS" mcc="415" mnc="03" apn="mms.mic1.com.lb" user="mic1" password="mic1" mmsc="http://mms.mic1.com.lb" mmsproxy="192.168.23.51" mmsport="9201" type="mms" />
+ <apn carrier="mtc touch MMS" mcc="415" mnc="03" apn="mms.mtctouch.com.lb" user="mtctouch" mmsc="http://mms:8080/mms/" mmsproxy="192.168.4.103" mmsport="9201" type="mms" />
+ <apn carrier="Alfa WAP" mcc="415" mnc="03" apn="wap.mic1.com.lb" user="mic1" password="mic1" proxy="192.168.023.050" port="80" type="default,supl" />
+ <apn carrier="Zain JO" mcc="416" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Zain JO MMS" mcc="416" mnc="01" apn="mms" user="mms" password="mms" mmsc="http://mms.jo.zain.com" mmsproxy="192.168.55.10" mmsport="80" type="mms" />
+ <apn carrier="Umniah MMS" mcc="416" mnc="03" apn="mms" mmsc="http://mms.umniah.com/" mmsproxy="10.1.1.10" mmsport="9201" type="mms" />
+ <apn carrier="Umniah" mcc="416" mnc="03" apn="net" type="default,supl" />
+ <apn carrier="Orange JO" mcc="416" mnc="77" apn="inet.orange.jo" user="net" password="net" type="default,supl" />
+ <apn carrier="Orange JO MMS" mcc="416" mnc="77" apn="mms.orangemobile.jo" user="mmc" password="mmc" mmsc="http://172.16.1.96/servlets/mms" mmsproxy="172.16.1.2" mmsport="8080" type="mms" />
+ <apn carrier="Syriatel MMS" mcc="417" mnc="01" apn="mms.syriatel.com" mmsc="http://mymms.syriatel.com/" mmsproxy="172.20.5.6" mmsport="9201" type="mms" />
+ <apn carrier="Syriatel" mcc="417" mnc="01" apn="net.syriatel.com" type="default,supl" />
+ <apn carrier="MTN SY" mcc="417" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="MTN SY MMS" mcc="417" mnc="02" apn="mms" mmsc="http://10.11.161.138/:10021/mmsc" mmsproxy="10.11.161.131" mmsport="8080" type="mms" />
+ <apn carrier="Zain KW" mcc="419" mnc="02" apn="pps" user="pps" password="pps" type="default,supl" />
+ <apn carrier="Zain KW MMS" mcc="419" mnc="02" apn="pps" user="mms" password="mms" mmsc="http://mms.zain" mmsproxy="176.0.0.65" mmsport="8080" type="mms" />
+ <apn carrier="Viva KW" mcc="419" mnc="04" apn="viva" type="default,supl" />
+ <apn carrier="Viva KW MMS" mcc="419" mnc="04" apn="viva" mmsc="http://172.16.128.80:38090/was" mmsproxy="172.16.128.228" mmsport="8080" type="mms" />
+ <apn carrier="MTC Vodafone KW" mcc="419" mnc="2" apn="apn01" type="default,supl" />
+ <apn carrier="MTC Vodafone KW MMS" mcc="419" mnc="2" apn="mms" user="annyway" password="online" mmsc="http://176.000.000.021" mmsproxy="176.0.0.65" mmsport="8080" type="mms" />
+ <apn carrier="wataniya" mcc="419" mnc="3" apn="action.wataniya.com" type="default,supl" />
+ <apn carrier="wataniya MMS" mcc="419" mnc="3" apn="mms.wataniya.com" mmsc="http://action.wataniya.com" mmsproxy="194.126.053.064" mmsport="8080" type="mms" />
+ <apn carrier="AL JA WAL" mcc="420" mnc="01" apn="jawalnet.com.sa" type="default,supl" />
+ <apn carrier="AL JA WAL MMS" mcc="420" mnc="01" apn="mms.net.sa" mmsc="http://mms.net.sa:8002" mmsproxy="10.1.1.1" mmsport="9201" type="mms" />
+ <apn carrier="Mobily MMS" mcc="420" mnc="03" apn="mms1" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="9201" type="mms" />
+ <apn carrier="Mobily" mcc="420" mnc="03" apn="web1" type="default,supl" />
+ <apn carrier="Zain SA" mcc="420" mnc="04" apn="zain" mmsc="http://10.122.200.12:8002" mmsproxy="10.122.200.10" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Oman Mobile MMS" mcc="422" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://mmsc.omanmobile.com:10021/mmsc" mmsproxy="192.168.203.35" mmsport="9201" type="mms" />
+ <apn carrier="Oman Mobile" mcc="422" mnc="02" apn="wap" user="wap" password="wap" type="default,supl" />
+ <apn carrier="Nawras" mcc="422" mnc="03" apn="isp.nawras.com.om" user="test" password="test" type="default,supl" />
+ <apn carrier="Nawras MMS" mcc="422" mnc="03" apn="mms.nawras.com.om" user="test" password="test" proxy="10.128.240.19" port="8080" mmsc="http://10.128.240.16/servlets/mms" mmsproxy="10.128.240.19" mmsport="8080" type="mms" />
+ <apn carrier="Etisalat UAE" mcc="424" mnc="02" apn="etisalat.ae" type="default,supl" />
+ <apn carrier="Etisalat UAE MMS" mcc="424" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://mms/servlets/mms" mmsproxy="10.12.0.30" mmsport="9201" type="mms" />
+ <apn carrier="du" mcc="424" mnc="03" apn="du" mmsc="http://mms.du.ae" mmsproxy="10.19.18.4" mmsport="9201" type="default,supl,mms" />
+ <apn carrier="Tesco UK" mcc="425" mnc="01" apn="prepay.tesco-mobile.com" user="tescowap" password="password" server="http://wap.tesco-mobile.com/" proxy="193.113.200.195" port="9201" type="default,supl,mms" />
+ <apn carrier="Orange IL" mcc="425" mnc="01" apn="uinternet" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Orange IL" mcc="425" mnc="01" apn="wap.orange.co.il" user="orange" password="mobile54" proxy="192.118.11.55" mmsc="http://192.168.220.15/servlets/mms" type="mms" />
+ <apn carrier="CellCOM" mcc="425" mnc="02" apn="internetg" type="default,supl" />
+ <apn carrier="CellCOM MMS" mcc="425" mnc="02" apn="mms" user="Cellcom" password="HyD43f" mmsc="http://mms.cellcom.co.il" mmsproxy="212.150.203.37" mmsport="9201" type="mms" />
+ <apn carrier="Pelephone" mcc="425" mnc="03" apn="internet.pelephone.net.il" user="pcl@3g" password="pcl" type="default,supl" />
+ <apn carrier="Pelephone MMS" mcc="425" mnc="03" apn="internet.pelephone.net.il" user="pcl@3g" password="pcl" server="pelephone" mmsc="http://mmsu.pelephone.net.il" mmsproxy="10.170.9.54" mmsport="9093" type="mms" />
+ <apn carrier="Pelephone Internet Static" mcc="425" mnc="03" apn="org.pelephone.net.il" user="pcl@rsingle" password="pcl" type="default,supl" />
+ <apn carrier="BATELCO BH" mcc="426" mnc="01" apn="internet.batelco.com" user="internet" password="internet" type="default,supl" />
+ <apn carrier="BATELCO BH MMS" mcc="426" mnc="01" apn="mms.batelco.com" user="mms" password="mms" mmsc="http://192.168.36.10/servlets/mms" mmsproxy="192.168.1.2" mmsport="9201" type="mms" />
+ <apn carrier="MTC Vodafone BH" mcc="426" mnc="02" apn="internet" user="internet" password="internet" type="default,supl" />
+ <apn carrier="MTC Vodafone BH MMS" mcc="426" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://172.18.83.129" mmsproxy="172.18.85.34" mmsport="9201" type="mms" />
+ <apn carrier="Viva BH" mcc="426" mnc="04" apn="viva.bh" type="default,supl" />
+ <apn carrier="Viva BH MMS" mcc="426" mnc="04" apn="vivawap.bh" mmsc="http://mms.viva.com.bh:38090" mmsproxy="172.18.142.36" mmsport="8080" type="mms" />
+ <apn carrier="Q-tel MMS" mcc="427" mnc="01" apn="mms.qtel" user="mms" password="gprs" mmsc="http://mmsr.qtelmma.qa" mmsproxy="10.23.8.3" mmsport="9201" type="mms" />
+ <apn carrier="Q-tel" mcc="427" mnc="01" apn="web.qtel" user="gprs" password="gprs" type="default,supl" />
+ <apn carrier="Vodafone QA MMS" mcc="427" mnc="02" apn="vodafone.com.qa" mmsc="http://mms.vodafone.com.qa/mmsc" mmsproxy="10.101.97.102" mmsport="80" type="mms" />
+ <apn carrier="Vodafone QA" mcc="427" mnc="02" apn="web.vodafone.com.qa" type="default,supl" />
+ <apn carrier="MTS UZ" mcc="434" mnc="07" apn="net.mts.uz" user="mts" password="mts" type="default,supl" />
+ <apn carrier="NTT Docomo(bizho)" mcc="440" mnc="10" apn="mpr2.bizho.net" type="default,supl,mms" />
+ <apn carrier="NTT Docomo(mopera)" mcc="440" mnc="10" apn="mopera.net" type="default,supl,mms" />
+ <apn carrier="NTT Docomo(flat)" mcc="440" mnc="10" apn="mopera.flat.foma.ne.jp" type="default,supl,mms" />
+ <apn carrier="NTT Docomo(128k)" mcc="440" mnc="10" apn="mpr.ex-pkt.net" type="default,supl,mms" />
+ <apn carrier="NTT Docomo(mopera ff)" mcc="440" mnc="10" apn="open.mopera.net" type="default,supl,mms" />
+ <apn carrier="Softbank(open)" mcc="440" mnc="20" apn="open.softbank.ne.jp" user="opensoftbank" password="ebMNuX1FIHg9d3DA" mmsc="http://mms/" mmsproxy="mmsopen.softbank.ne.jp" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Softbank(smile.world)" mcc="440" mnc="20" apn="smile.world" user="dna1trop" password="so2t3k3m2a" mmsc="http://mms/" mmsproxy="smilemms.softbank.ne.jp" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="SKT3G" mcc="450" mnc="05" apn="web.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,supl,mms" />
+ <apn carrier="KT-HSDPA" mcc="450" mnc="08" apn="alwayson-r6.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="default,supl,mms" />
+ <apn carrier="Mobifone MMS" mcc="452" mnc="00" apn="m-i090" user="wap" password="wap" mmsc="http://203.162.21.114/mmsc" mmsproxy="203.162.21.114" mmsport="8000" type="mms" />
+ <apn carrier="Mobifone" mcc="452" mnc="00" apn="m-wap" user="mms" password="mms" type="default,supl" />
+ <apn carrier="Vinaphone MMS" mcc="452" mnc="02" apn="m3-mms" user="mms" password="mms" mmsc="http://mms.vinaphone.vnn.vn:8002" mmsproxy="10.1.10.46" mmsport="9201" type="mms" />
+ <apn carrier="Vinaphone" mcc="452" mnc="02" apn="m3-world" user="mms" password="mms" type="default,supl" />
+ <apn carrier="Viettel" mcc="452" mnc="04" apn="v-internet" type="default,supl" />
+ <apn carrier="Viettel MMS" mcc="452" mnc="04" apn="v-mms" mmsc="http://mms.viettelmobile.com.vn/mms" mmsproxy="192.168.233.10" mmsport="9201" type="mms" />
+ <apn carrier="BeeLine VN" mcc="452" mnc="07" apn="internet" type="default,supl" />
+ <apn carrier="VIETNAMOBILE MMS" mcc="452" mnc="5" apn="mms" mmsc="http://10.10.128.58/servlets/mms" mmsproxy="10.10.128.44" mmsport="8080" type="mms" />
+ <apn carrier="VIETNAMOBILE" mcc="452" mnc="5" apn="wap" proxy="10.10.128.44" port="8080" type="default,supl" />
+ <apn carrier="Beeline VN MMS" mcc="452" mnc="7" apn="MMS" user="mms" password="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" />
+ <apn carrier="CSL" mcc="454" mnc="00" apn="hkcsl" proxy="192.168.59.51" port="8080" mmsc="http://192.168.58.171:8002/" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="CSL GPRS" mcc="454" mnc="00" apn="hkcsl" proxy="192.168.59.51" port="8080" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="CSL" mcc="454" mnc="02" apn="hkcsl" proxy="192.168.59.51" port="8080" mmsc="http://192.168.58.171:8002/" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="CSL GPRS" mcc="454" mnc="02" apn="hkcsl" proxy="192.168.59.51" port="8080" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="3 HK" mcc="454" mnc="03" apn="mobile.three.com.hk" user="*" password="*" server="*" mmsc="http://mms.um.three.com.hk:10021/mmsc" mmsproxy="172.20.97.116" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="3 (2G) MMS" mcc="454" mnc="04" apn="mms-g.three.com.hk" mmsc="http://10.30.15.51:10021/mmsc" mmsproxy="10.30.15.53" mmsport="9201" type="mms" />
+ <apn carrier="3 (2G)" mcc="454" mnc="04" apn="web-g.three.com.hk" type="default,supl" />
+ <apn carrier="SMC-Voda" mcc="454" mnc="06" apn="SmarTone-Vodafone" mmsc="http://mms.smartone-vodafone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="SMC-Voda Internet" mcc="454" mnc="06" apn="SmarTone-Vodafone" mmsc="http://mms.smartone-vodafone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="CSL Data" mcc="454" mnc="10" apn="hkcsl" proxy="192.168.59.51" port="8080" mmsc="http://192.168.58.171:8002/" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="one2free 2G" mcc="454" mnc="10" apn="hkcsl" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="PEOPLES MMS" mcc="454" mnc="12" apn="170170" mmsc="http://mms.peoples.com.hk/mms" mmsproxy="172.31.31.36" mmsport="8080" type="mms" />
+ <apn carrier="China Mobile HK MMS" mcc="454" mnc="12" apn="peoples.mms" mmsc="http://mms.peoples.com.hk/mms" mmsproxy="172.31.31.36" mmsport="8080" type="mms" />
+ <apn carrier="PEOPLES" mcc="454" mnc="12" apn="peoples.net" type="default,supl" />
+ <apn carrier="SMC-Voda" mcc="454" mnc="15" apn="SmarTone-Vodafone" mmsc="http://mms.smartone-vodafone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="PCCW 2G" mcc="454" mnc="16" apn="pccwdata" type="default,supl" />
+ <apn carrier="PCCW 2G MMS" mcc="454" mnc="16" apn="pccwmms" mmsc="http://mmsc.mms.pccwmobile.com:8002/" mmsproxy="10.131.2.8" mmsport="8080" type="mms" />
+ <apn carrier="SMC-Voda" mcc="454" mnc="17" apn="SmarTone-Vodafone" mmsc="http://mms.smartone-vodafone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="CSL" mcc="454" mnc="18" apn="hkcsl" proxy="192.168.59.51" port="8080" mmsc="http://192.168.58.171:8002/" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="PCCW" mcc="454" mnc="19" apn="pccw" mmsc="http://3gmms.pccwmobile.com:8080/was" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="PCCW 3G" mcc="454" mnc="19" apn="pccw" mmsc="http://3gmms.pccwmobile.com:8080/was" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="SmarTone Macau" mcc="455" mnc="00" apn="smartgprs" proxy="10.9.9.29" port="8080" mmsc="http://mms.smartone.com.mo/dmog/mo" mmsproxy="10.9.9.29" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="SmarTone MMS" mcc="455" mnc="00" apn="smartgprs" mmsc="http://mms.smartone.com.mo/dmog/mo" mmsproxy="10.9.9.29" mmsport="9201" type="mms" />
+ <apn carrier="SmarTone" mcc="455" mnc="00" apn="smartweb" type="default,supl" />
+ <apn carrier="CTM" mcc="455" mnc="01" apn="ctm-mobile" type="default,supl" />
+ <apn carrier="CTM MMS" mcc="455" mnc="01" apn="ctmmms" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="mms" />
+ <apn carrier="Hutchison Macau MMS" mcc="455" mnc="03" apn="mms.hutchisonmacau.com" mmsc="http://10.30.15.51:10021/mmsc" mmsproxy="10.30.15.53" mmsport="8080" type="mms" />
+ <apn carrier="Hutchison Macau" mcc="455" mnc="03" apn="web-g.three.com.hk" user="hutchison" password="1234" type="default,supl" />
+ <apn carrier="CTM" mcc="455" mnc="04" apn="ctm-mobile" proxy="192.168.99.2" port="8080" type="default,supl" />
+ <apn carrier="CTM MMS" mcc="455" mnc="04" apn="ctmmms" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="mms" />
+ <apn carrier="Mobitel KH" mcc="456" mnc="01" apn="postpaid" user="mobitel" password="mobitel" type="default,supl" />
+ <apn carrier="China Mobile" mcc="460" mnc="00" apn="cmnet" type="default,supl" />
+ <apn carrier="China Mobile MMS" mcc="460" mnc="00" apn="cmwap" proxy="10.0.0.172" port="80" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" />
+ <apn carrier="China Unicom 3G" mcc="460" mnc="01" apn="3gnet" port="80" type="default,supl" />
+ <apn carrier="中国联通 3g 彩信 (China Unicom)" mcc="460" mnc="01" apn="3gwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms" />
+ <apn carrier="China Unicom MMS" mcc="460" mnc="01" apn="uniwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms" />
+ <apn carrier="China Mobile" mcc="460" mnc="02" apn="cmnet" type="default,supl" />
+ <apn carrier="China Mobile MMS" mcc="460" mnc="02" apn="cmwap" proxy="10.0.0.172" port="80" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" />
+ <apn carrier="中国移动 (China Mobile) GPRS" mcc="460" mnc="07" apn="cmnet" type="default,supl" />
+ <apn carrier="中国移动彩信 (China Mobile)" mcc="460" mnc="07" apn="cmwap" proxy="10.0.0.172" port="80" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" />
+ <apn carrier="遠傳電信(Far EasTone) (Fetnet01)" mcc="466" mnc="01" apn="fetnet01" proxy="210.241.199.199" port="80" type="default,supl" />
+ <apn carrier="FarEasTone MMS" mcc="466" mnc="01" apn="fetnet01" mmsc="http://mms" mmsproxy="210.241.199.199" mmsport="9201" type="mms" />
+ <apn carrier="FarEasTone" mcc="466" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="KGT" mcc="466" mnc="88" apn="internet" type="default,supl" />
+ <apn carrier="KGT MMS" mcc="466" mnc="88" apn="kgtmms" mmsc="http://mms.kgtmms.net.tw/mms/wapenc" mmsproxy="172.28.33.5" mmsport="8080" type="mms" />
+ <apn carrier="震旦電信(AURORA) (MMS)" mcc="466" mnc="89" apn="aurorawap" mmsc="http://auroramms" mmsproxy="172.24.128.36" mmsport="8080" type="mms" />
+ <apn carrier="震旦電信(AURORA) (Internet)" mcc="466" mnc="89" apn="auroraweb" type="default,supl" />
+ <apn carrier="Vibo" mcc="466" mnc="89" apn="internet" type="default,supl" />
+ <apn carrier="威寶電信(VIBO)" mcc="466" mnc="89" apn="vibo" mmsc="http://mms" mmsproxy="172.24.128.36" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Vibo" mcc="466" mnc="89" apn="vibo" mmsc="http://mms" mmsproxy="172.24.128.36" mmsport="8080" type="mms" />
+ <apn carrier="中華電信(Chunghwa)" mcc="466" mnc="92" apn="emome" mmsc="http://mms.emome.net:8002" mmsproxy="10.1.1.1" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="CHT MMS" mcc="466" mnc="92" apn="emome" mmsc="http://mms.emome.net:8002" mmsproxy="10.1.1.1" mmsport="8080" type="mms" />
+ <apn carrier="CHT" mcc="466" mnc="92" apn="internet" type="default,supl" />
+ <apn carrier="Mobitai MMS" mcc="466" mnc="93" apn="gprs1" user="gprs" password="gprs" mmsc="http://mms.mobeelife.net/mms/wapenc" mmsproxy="192.168.77.5" mmsport="80" type="mms" />
+ <apn carrier="Mobitai" mcc="466" mnc="93" apn="internet" user="gprs" password="gprs" type="default,supl" />
+ <apn carrier="台灣大哥大(TW Mobile) (MMS)" mcc="466" mnc="93" apn="mms" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms" />
+ <apn carrier="台灣大哥大(TW Mobile) (twm)" mcc="466" mnc="93" apn="twm" type="default,supl" />
+ <apn carrier="Taiwan Mobile Internet" mcc="466" mnc="97" apn="internet" type="default,supl" />
+ <apn carrier="Taiwan Mobile MMS" mcc="466" mnc="97" apn="mms" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms" />
+ <apn carrier="Taiwan Mobile" mcc="466" mnc="97" apn="twm" type="default,supl" />
+ <apn carrier="TransAsia" mcc="466" mnc="99" apn="internet" type="default,supl" />
+ <apn carrier="TransAsia MMS" mcc="466" mnc="99" apn="mms" mmsc="http://mms" mmsproxy="10.1.1.2" mmsport="80" type="mms" />
+ <apn carrier="台灣大哥大(TW Mobile) (twm)" mcc="466" mnc="99" apn="twm" type="default,supl" />
+ <apn carrier="Grameenphone" mcc="470" mnc="01" apn="gpinterneth" type="default,supl" />
+ <apn carrier="Robi MMS" mcc="470" mnc="02" apn="WAP" mmsc="http://192.168.23.4/was" mmsproxy="192.168.023.007" mmsport="9028" type="mms" />
+ <apn carrier="Robi" mcc="470" mnc="02" apn="internet" port="9201" type="default,supl" />
+ <apn carrier="Banglalink MMS" mcc="470" mnc="03" apn="blmms" mmsc="http://" mmsproxy="10.10.55.34" mmsport="8799" type="mms" />
+ <apn carrier="Banglalink" mcc="470" mnc="03" apn="blweb" type="default,supl" />
+ <apn carrier="Warid BD" mcc="470" mnc="07" apn="internet" type="default,supl" />
+ <apn carrier="Warid BD MMS" mcc="470" mnc="07" apn="mms" mmsc="http://mms.waridtel.com.bd/index.jsp" mmsproxy="10.128.5.6" mmsport="8080" type="mms" />
+ <apn carrier="Maxis 2G Internet" mcc="502" mnc="12" apn="net" user="maxis" password="wap" type="default,supl" />
+ <apn carrier="Maxis 2G MMS" mcc="502" mnc="12" apn="net" user="maxis" password="wap" server="202.75.133.49" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="mms" />
+ <apn carrier="Maxis 3G Internet" mcc="502" mnc="12" apn="unet" user="maxis" password="wap" type="default,supl" />
+ <apn carrier="Maxis 3G MMS" mcc="502" mnc="12" apn="unet" user="maxis" password="wap" server="202.75.133.49" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="mms" />
+ <apn carrier="Celcom" mcc="502" mnc="13" apn="celcom3g" type="default,supl" />
+ <apn carrier="Celcom MMS" mcc="502" mnc="13" apn="celcom3g" user="mms" password="mms" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="mms" />
+ <apn carrier="Digi MMS" mcc="502" mnc="16" apn="digimms" user="mms" password="mms" mmsc="http://mms.digi.com.my/servlets/mms" mmsproxy="203.92.128.160" mmsport="9201" type="mms" />
+ <apn carrier="Digi" mcc="502" mnc="16" apn="diginet" user="digi" password="digi" type="default,supl" />
+ <apn carrier="Celcom 3G Internet" mcc="502" mnc="19" apn="celcom3g" type="default,supl" />
+ <apn carrier="Celcom 3G MMS" mcc="502" mnc="19" apn="celcom3g" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="mms" />
+ <apn carrier="Celcom 2G Internet" mcc="502" mnc="19" apn="celcom.net.my" type="default,supl" />
+ <apn carrier="Celcom 2G MMS" mcc="502" mnc="19" apn="mms.celcom.net.my" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="mms" />
+ <apn carrier="U Mobile Internet" mcc="502" mnc="18" apn="my3g" type="default,supl" />
+ <apn carrier="U Mobile MMS" mcc="502" mnc="18" apn="my3g" mmsc="http://10.30.3.11/servlets/mms" mmsproxy="10.30.5.11" mmsport="8080" type="mms" />
+ <apn carrier="Telstra MMS" mcc="505" mnc="01" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" />
+ <apn carrier="Telstra Internet" mcc="505" mnc="01" apn="Telstra.wap" type="default,supl" />
+ <apn carrier="Telstra w/ Portal" mcc="505" mnc="01" apn="telstra.internet" proxy="10.1.1.181" port="80" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.181" mmsport="80" type="default,supl,mms" />
+ <apn carrier="Telstra 3G Pay by Time" mcc="505" mnc="01" apn="telstra.pcpack" password="telstra" type="default,supl,mms" />
+ <apn carrier="Exetel" mcc="505" mnc="02" apn="exetel1" type="default,supl" />
+ <apn carrier="Optus" mcc="505" mnc="02" apn="internet" type="default,supl" />
+ <apn carrier="Optus MMS" mcc="505" mnc="02" apn="mms" user="*" password="*" server="*" proxy="202.139.83.152" port="8070" mmsc="http://mmsc.optus.com.au:8002/" mmsproxy="61.88.190.10" mmsport="8070" type="mms" />
+ <apn carrier="Virgin AU" mcc="505" mnc="02" apn="virgininternet" user="*" password="*" server="*" type="default,supl" />
+ <apn carrier="Virgin AU MMS" mcc="505" mnc="02" apn="virginmms" user="*" password="*" server="*" proxy="202.139.083.152" port="8070" mmsc="http://mms.virginvibe.com.au:8002/" mmsproxy="202.139.083.152" mmsport="8070" type="mms" />
+ <apn carrier="Optus Internet" mcc="505" mnc="02" apn="yesinternet" user="*" password="*" server="*" type="default,supl" />
+ <apn carrier="Vodafone AU-MMS" mcc="505" mnc="03" apn="live.vodafone.com" user="*" password="*" server="*" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone AU" mcc="505" mnc="03" apn="vfinternet.au" user="*" password="*" server="*" type="default,supl" />
+ <apn carrier="3 AU" apn="3services" mmsc="http://mmsc.three.net.au:10021/mmsc" mmsproxy="10.176.57.25" mmsport="8799" mcc="505" mnc="06" type="default,supl,mms"/>
+ <apn carrier="VF AU PXT" mcc="505" mnc="07" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="mms" />
+ <apn carrier="VF Internet" mcc="505" mnc="07" apn="vfinternet.au" type="default,supl" />
+ <apn carrier="Telstra MMS" mcc="505" mnc="11" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" />
+ <apn carrier="Telstra Internet" mcc="505" mnc="11" apn="Telstra.wap" type="default,supl" />
+ <apn carrier="3Internet" mcc="505" mnc="12" apn="3netaccess" type="default,supl" />
+ <apn carrier="3" mcc="505" mnc="12" apn="3services" mmsc="http://mmsc.three.net.au:10021/mmsc" mmsproxy="10.176.57.25" mmsport="8799" type="default,supl,mms" />
+ <apn carrier="Telstra MMS" mcc="505" mnc="71" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" />
+ <apn carrier="Telstra Internet" mcc="505" mnc="71" apn="Telstra.wap" type="default,supl" />
+ <apn carrier="Telstra MMS" mcc="505" mnc="72" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" />
+ <apn carrier="Telstra Internet" mcc="505" mnc="72" apn="Telstra.wap" type="default,supl" />
+ <apn carrier="VF AU PXT" mcc="505" mnc="88" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="mms" />
+ <apn carrier="VF Internet" mcc="505" mnc="88" apn="vfinternet.au" type="default,supl" />
+ <apn carrier="Optus Internet" mcc="505" mnc="90" apn="internet" type="default,supl" />
+ <apn carrier="Optus MMS" mcc="505" mnc="90" apn="mms" mmsc="http://mmsc.optus.com.au:8002/" mmsproxy="61.88.190.10" mmsport="8070" type="mms" />
+ <apn carrier="Indosat" mcc="510" mnc="01" apn="indosat3g" user="indosat" password="indosat" type="default,supl" />
+ <apn carrier="Indosat MMS" mcc="510" mnc="01" apn="indosatmms" user="indosat" password="indosat" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" />
+ <apn carrier="Telkomsel" mcc="510" mnc="10" apn="internet" type="default,supl" />
+ <apn carrier="Telkomsel MMS" mcc="510" mnc="10" apn="mms" user="wap" password="wap123" mmsc="http://mms.telkomsel.com" mmsproxy="10.1.89.150" mmsport="9201" type="mms" />
+ <apn carrier="Excelcom" mcc="510" mnc="11" apn="www.xlgprs.net" user="xlgprs" password="proxl" type="default,supl" />
+ <apn carrier="Excelcom MMS" mcc="510" mnc="11" apn="www.xlmms.net" user="xlgprs" password="proxl" mmsc="http://mmc.xl.net.id/servlets/mms" mmsproxy="202.152.240.50" mmsport="8080" type="mms" />
+ <apn carrier="IM3 MMS" mcc="510" mnc="21" apn="indosatmms" user="indosat" password="indosat" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" />
+ <apn carrier="IM3 Internet" mcc="510" mnc="21" apn="www.indosat-m3.net" user="gprs" password="im3" type="default,supl" />
+ <apn carrier="3 ID" mcc="510" mnc="89" apn="3gprs" user="3gprs" password="3gprs" proxy="10.4.0.10" port="3128" type="default,supl" />
+ <apn carrier="3 ID MMS" mcc="510" mnc="89" apn="3mms" user="3mms" password="3mms" mmsc="http://mmsthree.co.id" mmsproxy="10.4.0.10" mmsport="3128" type="mms" />
+ <apn carrier="AXIS" mcc="510" mnc="8" apn="AXIS" user="axis" password="123456" type="default,supl" />
+ <apn carrier="AXIS MMS" mcc="510" mnc="8" apn="AXISmms" user="axis" password="123456" mmsc="http://mmsc.AXIS" mmsproxy="10.8.3.8" mmsport="8080" type="mms" />
+ <apn carrier="GLOBE" mcc="515" mnc="02" apn="internet.globe.com.ph" type="default,supl" />
+ <apn carrier="GLOBE MMS" mcc="515" mnc="02" apn="real.globe.com.ph" user="globe" password="globe" mmsc="http://192.40.100.22:10021/mmsc" mmsproxy="192.40.100.20" mmsport="8080" type="mms" />
+ <apn carrier="SMART" mcc="515" mnc="03" apn="internet" type="default,supl" />
+ <apn carrier="SMART MMS" mcc="515" mnc="03" apn="mms" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="8080" type="mms" />
+ <apn carrier="SUN" mcc="515" mnc="05" apn="minternet" type="default,supl" />
+ <apn carrier="SUN MMS" mcc="515" mnc="05" apn="mms" mmsc="http://mmscenter.suncellular.com.ph" mmsproxy="202.138.159.78" mmsport="9201" type="mms" />
+ <apn carrier="AIS GPRS Internet" mcc="520" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="AIS MMS" mcc="520" mnc="01" apn="multimedia" mmsc="http://mms.mobilelife.co.th" mmsproxy="203.170.229.34" mmsport="8080" type="mms" />
+ <apn carrier="TOT 3G" mcc="520" mnc="15" apn="internet" type="default,supl" />
+ <apn carrier="TOT 3G MMS" mcc="520" mnc="15" apn="mms" mmsc="http://mms.tot3g.net:8002" mmsproxy="10.218.24.83" mmsport="8080" type="mms" />
+ <apn carrier="DTAC MMS" mcc="520" mnc="18" apn="mms" mmsc="http://mms.dtac.co.th:8002" mmsproxy="203.155.200.133" mmsport="8080" type="mms" />
+ <apn carrier="DTAC GPRS WEB" mcc="520" mnc="18" apn="www.dtac.co.th" type="default,supl" />
+ <apn carrier="True" mcc="520" mnc="99" apn="internet" user="true" password="true" type="default,supl" />
+ <apn carrier="True MMS" mcc="520" mnc="99" apn="mms" user="true" password="true" mmsc="http://mms.trueworld.net:8002" mmsproxy="10.4.7.39" mmsport="8080" type="mms" />
+ <apn carrier="SingTel" mcc="525" mnc="01" apn="e-ideas" type="default,supl" />
+ <apn carrier="IDEAS" mcc="525" mnc="01" apn="e-ideas" user="*" password="*" server="*" type="default,supl,mms" />
+ <apn carrier="IDEAS MMS" mcc="525" mnc="01" apn="e-ideas" user="65IDEAS" password="65" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="mms" />
+ <apn carrier="SingTel" mcc="525" mnc="02" apn="e-ideas" type="default,supl" />
+ <apn carrier="SingTel MMS" mcc="525" mnc="02" apn="e-ideas" user="65IDEAS" password="IDEAS" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="mms" />
+ <apn carrier="M1 MMS" mcc="525" mnc="03" apn="Miworld" proxy="172.16.1.23" port="9201" mmsc="http://mmsgw:8002" mmsproxy="172.16.14.10" mmsport="9201" type="mms" />
+ <apn carrier="MiWorld WAP (GPRS)" mcc="525" mnc="03" apn="miworld" user="65" password="user123" proxy="172.16.1.23" port="8081" type="default,supl" />
+ <apn carrier="M1 MMS" mcc="525" mnc="03" apn="miworld" user="65" password="user123" mmsc="http://mmsgw:8002" mmsproxy="172.16.14.10" mmsport="8080" type="mms" />
+ <apn carrier="M1" mcc="525" mnc="03" apn="sunsurf" type="default,supl" />
+ <apn carrier="Sunsurf Internet" mcc="525" mnc="03" apn="sunsurf" type="default,supl,mms" />
+ <apn carrier="StarHub" mcc="525" mnc="05" apn="internet" type="default,supl" />
+ <apn carrier="Gee! MMS" mcc="525" mnc="05" apn="shmms" mmsc="http://mms.starhubgee.com.sg:8002/" mmsproxy="10.12.1.80" mmsport="80" type="mms" />
+ <apn carrier="Gee! (GPRS)" mcc="525" mnc="05" apn="shwap" user="star" password="hub" proxy="10.12.1.2" port="80" type="default,supl" />
+ <apn carrier="StarHub" mcc="525" mnc="05" apn="shwapint" type="default,supl" />
+ <apn carrier="B-Mobile MMS" mcc="528" mnc="02" apn="bmobilemms" mmsc="http://mms.bmobile.com.bn/was" mmsproxy="129.9.10.20" mmsport="6500" type="mms" />
+ <apn carrier="B-Mobile" mcc="528" mnc="02" apn="bmobilewap" type="default,supl" />
+ <apn carrier="DSTCom" mcc="528" mnc="11" apn="dst.internet" user="internet" password="internet" type="default,supl" />
+ <apn carrier="DSTCom MMS" mcc="528" mnc="11" apn="dst.mms" user="mms" password="mms" mmsc="http://mms.dst.com.bn/mmsc" mmsproxy="10.100.6.101" mmsport="9201" type="mms" />
+ <apn carrier="Vodafone NZ MMS" mcc="530" mnc="01" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.nz/pxtsend" mmsproxy="172.030.038.003" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone NZ" mcc="530" mnc="01" apn="www.vodafone.net.nz" type="default,supl" />
+ <apn carrier="Telecom NZ" mcc="530" mnc="02" apn="internet.telecom.co.nz" type="default,supl" />
+ <apn carrier="VFNZ PXT" mcc="530" mnc="02" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.nz/pxtsend" mmsproxy="172.30.38.3" mmsport="8080" type="mms" />
+ <apn carrier="Telecom NZ MMS" mcc="530" mnc="02" apn="wap.telecom.co.nz" mmsc="http://lsmmsc.xtra.co.nz" mmsproxy="210.55.11.73" mmsport="80" type="mms" />
+ <apn carrier="VFNZ Internet" mcc="530" mnc="02" apn="www.vodafone.net.nz" type="default,supl" />
+ <apn carrier="Telecom NZ" mcc="530" mnc="03" apn="internet.telecom.co.nz" type="default,supl" />
+ <apn carrier="Telecom NZ MMS" mcc="530" mnc="03" apn="wap.telecom.co.nz" mmsc="http://lsmmsc.xtra.co.nz" mmsproxy="210.55.11.73" mmsport="80" type="mms" />
+ <apn carrier="XT Mobile" mcc="530" mnc="05" apn="internet.telecom.co.nz" type="default,supl" />
+ <apn carrier="XT Mobile MMS" mcc="530" mnc="05" apn="wap.telecom.co.nz" mmsc="http://lsmmsc.xtra.co.nz" mmsproxy="210.55.11.73" mmsport="8080" type="mms" />
+ <apn carrier="2 degrees mobile" mcc="530" mnc="24" apn="2degrees" proxy="118.148.1.118" port="8080" type="default,supl,mms" />
+ <apn carrier="2degrees Internet" mcc="530" mnc="24" apn="internet" type="default,supl" />
+ <apn carrier="2 degrees mobile (open)" mcc="530" mnc="24" apn="internet" type="default,supl,mms" />
+ <apn carrier="2degrees MMS" mcc="530" mnc="24" apn="mms" mmsc="http://mms.2degreesmobile.net.nz:48090" mmsproxy="118.148.1.118" mmsport="8080" type="mms" />
+ <apn carrier="Vodafone FJ MMS" mcc="542" mnc="01" apn="live.vodafone.com.fj" mmsc="http://pxt.vodafone.net.fj/pxtsend" mmsproxy="010.202.002.040" mmsport="9201" type="mms" />
+ <apn carrier="Vodafone FJ" mcc="542" mnc="01" apn="vfinternet.fj" type="default,supl" />
+ <apn carrier="Digicel FJ MMS" mcc="542" mnc="02" apn="wap.digicelpacific.com" mmsc="http://mms.digicelpacific.com:8990" mmsproxy="10.150.122.12" mmsport="8080" type="mms" />
+ <apn carrier="Digicel FJ" mcc="542" mnc="02" apn="web.digicelpacific.com" type="default,supl" />
+ <apn carrier="Mobinil MMS" mcc="602" mnc="01" apn="mobinilmms" mmsc="http://10.7.13.24:8002" mmsproxy="62.241.155.54" mmsport="8080" type="mms" />
+ <apn carrier="Mobinil" mcc="602" mnc="01" apn="mobinilweb" type="default,supl" />
+ <apn carrier="Vodafone EG" mcc="602" mnc="02" apn="internet.vodafone.net" user="internet" password="internet" type="default,supl" />
+ <apn carrier="Vodafone EG MMS" mcc="602" mnc="02" apn="mms.vodafone.com.eg" user="mms" password="mms" mmsc="http://mms.vodafone.com.eg/servlets/mms" mmsproxy="163.121.178.002" mmsport="8080" type="mms" />
+ <apn carrier="Mobilis" mcc="603" mnc="01" apn="internet" user="inernet" password="internet" type="default,supl" />
+ <apn carrier="Mobilis MMS" mcc="603" mnc="01" apn="mms" user="mms" password="mms" mmsc="http://172.025.049.009/servlets/mms" mmsproxy="172.25.49.2" mmsport="8080" type="mms" />
+ <apn carrier="Djezzy" mcc="603" mnc="02" apn="djezzy.internet" type="default,supl,mms" />
+ <apn carrier="Djezzy MMS" mcc="603" mnc="02" apn="djezzy.mms" mmsc="http://172.024.97.152:10021/mmsc" mmsproxy="172.024.97.158" mmsport="8799" type="mms" />
+ <apn carrier="Nedjma" mcc="603" mnc="03" apn="internet" user="nedjma" password="nedjma" type="default,supl" />
+ <apn carrier="Nedjma MMS" mcc="603" mnc="03" apn="nedjmaMMS" user="mms" password="mms" mmsc="http://10.10.111.1" mmsproxy="192.168.52.3" mmsport="9201" type="mms" />
+ <apn carrier="Meditel" mcc="604" mnc="00" apn="internet1.meditel.ma" user="MEDIWAP" password="MEDIWAP" type="default,supl" />
+ <apn carrier="Meditel MMS" mcc="604" mnc="00" apn="mms.meditel.ma" user="MEDIMMS" password="MEDIMMS" mmsc="http://mms.meditel.ma:8088/mms" mmsproxy="010.008.008.009" type="mms" />
+ <apn carrier="IAM" mcc="604" mnc="01" apn="www.iamgprs1.ma" type="default,supl" />
+ <apn carrier="IAM MMS" apn="mmsiam" mmsc="http://mms:8002" mmsproxy="10.16.35.50" mmsport="8080" mcc="604" mnc="01" type="default,supl,mms"/>
+ <apn carrier="Orange TN" mcc="605" mnc="01" apn="keypro" type="default,supl" />
+ <apn carrier="Libyana MMS" mcc="606" mnc="00" apn="mms" mmsc="http://62.240.62.180:80" mmsproxy="192.168.8.148" mmsport="8000" type="mms" />
+ <apn carrier="Libyana" mcc="606" mnc="00" apn="wap" proxy="192.168.8.148" port="8000" type="default,supl" />
+ <apn carrier="Al-Madar MMS" mcc="606" mnc="01" apn="almadar.mms" mmsc="http://almadar.mms/servlets/mms" mmsproxy="41.208.82.50" mmsport="8080" type="mms" />
+ <apn carrier="Al-Madar" mcc="606" mnc="01" apn="almadar.net" type="default,supl" />
+ <apn carrier="Orange ML" mcc="610" mnc="02" apn="internet" user="internet" password="internet" type="default,supl" />
+ <apn carrier="Orange ML MMS" mcc="610" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://10.109.6.2/servlets/mms" mmsproxy="10.109.4.35" mmsport="8080" type="mms" />
+ <apn carrier="Orange CI MMS" mcc="612" mnc="03" apn="orangecimms" user="mms" password="mms" mmsc="http://172.20.6.1/servlets/mms" mmsproxy="172.20.4.33" mmsport="8080" type="mms" />
+ <apn carrier="Orange CI" mcc="612" mnc="03" apn="orangeciweb" user="web" password="web" type="default,supl" />
+ <apn carrier="MTN CI MMS" mcc="612" mnc="05" apn="mms.mtn.ci" mmsc="http://mms.mtn.ci/mms/wapenc" mmsproxy="172.16.100.5" mmsport="9201" type="mms" />
+ <apn carrier="MTN CI" mcc="612" mnc="05" apn="web.mtn.ci" server="*" type="default,supl" />
+ <apn carrier="Zain NG" mcc="621" mnc="20" apn="internet.ng.zain.com" type="default,supl" />
+ <apn carrier="MTN NG" mcc="621" mnc="30" apn="web.gprs.mtnnigeria.net" user="web" password="web" proxy="10.199.212.2" type="default,supl" />
+ <apn carrier="MTN NG MMS" mcc="621" mnc="30" apn="web.gprs.mtnnigeria.net" user="web" password="web" mmsc="http://10.199.212.8/servlets/mms" mmsproxy="10.199.212.2" mmsport="8080" type="mms" />
+ <apn carrier="Glo" mcc="621" mnc="50" apn="glo3gvideo" proxy="10.100.98.22" type="default,supl" />
+ <apn carrier="Glo MMS" mcc="621" mnc="50" apn="glomms" user="mms" password="mms" mmsc="http://mms.gloworld.com/mmsc" mmsproxy="010.100.082.004" mmsport="3130" type="mms" />
+ <apn carrier="Etisalat NG" mcc="621" mnc="60" apn="etisalat" type="default,supl" />
+ <apn carrier="Etisalat NG MMS" mcc="621" mnc="60" apn="etisalat" mmsc="http://10.71.170.30:38090/was" mmsproxy="10.71.170.5" mmsport="8080" type="mms" />
+ <apn carrier="MTN CM" mcc="624" mnc="01" apn="INTERNET" user="guest" password="guest" type="default,supl" />
+ <apn carrier="Orange CM" mcc="624" mnc="02" apn="orangecmgprs" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Orange GQ MMS" mcc="627" mnc="01" apn="orangemms" user="mms" password="mms" mmsc="http://192.168.17.34/servlets/mms" mmsproxy="192.168.17.2" mmsport="8080" type="mms" />
+ <apn carrier="Orange GQ" mcc="627" mnc="01" apn="orangenet" user="net" password="net" type="default,supl" />
+ <apn carrier="Vodacom CD" mcc="630" mnc="01" apn="vodanet" user="vodalive" type="default,supl" />
+ <apn carrier="Unitel" mcc="631" mnc="02" apn="internet.unitel.co.ao" type="default,supl" />
+ <apn carrier="Zain SD" mcc="634" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="yu" mcc="639" mnc="05" apn="internet" proxy="10.4.16.6" port="8080" type="default,supl" />
+ <apn carrier="yu MMS" mcc="639" mnc="05" apn="iternet" mmsc="http://10.4.16.22/servlets/mms" mmsproxy="10.4.16.6" type="mms" />
+ <apn carrier="Orange KE" mcc="639" mnc="07" apn="bew.orange.co.ke" user="orange" password="orange" type="default,supl" />
+ <apn carrier="Orange MG MMS" mcc="646" mnc="02" apn="orangemms" user="mms" password="orange" mmsc="http://10.152.10.70.38090" mmsproxy="10.150.0.115" mmsport="8080" type="mms" />
+ <apn carrier="Orange MG" mcc="646" mnc="02" apn="orangenet" type="default,supl" />
+ <apn carrier="Orange RE MMS" mcc="647" mnc="00" apn="orangerun.acte" user="orange" password="orange" mmsc="http://mms.orange.re/" mmsproxy="192.168.010.200" mmsport="8080" type="mms" />
+ <apn carrier="Orange RE" mcc="647" mnc="00" apn="orangerun" user="orange" password="orange" type="default,supl" />
+ <apn carrier="TNM" mcc="650" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Mascom" mcc="652" mnc="01" apn="internet.mascom" type="default,supl" />
+ <apn carrier="Orange BW" mcc="652" mnc="02" apn="internet.orange.co.bw" type="default,supl" />
+ <apn carrier="Orange BW MMS" mcc="652" mnc="02" apn="mms.orange.co.bw" mmsc="http://10.0.0.242/servlets/mms" mmsproxy="10.0.0.226" mmsport="8080" type="mms" />
+ <apn carrier="Vodacom ZA" mcc="655" mnc="01" apn="internet" type="default,supl" />
+ <apn carrier="Vodacom ZA MMS" mcc="655" mnc="01" apn="mms.vodacom.net" mmsc="http://mmsc.vodacom4me.co.za/" mmsproxy="196.6.128.13" mmsport="8080" type="mms" />
+ <apn carrier="Vlive!" mcc="655" mnc="01" apn="vlive" proxy="196.6.128.12" port="8080" type="default,supl" />
+ <apn carrier="Cell C" mcc="655" mnc="07" apn="Internet" type="default,supl" />
+ <apn carrier="Cell C MMS" mcc="655" mnc="07" apn="mms" mmsc="http://mms.cmobile.co.za" mmsproxy="196.031.116.250" mmsport="8080" type="mms" />
+ <apn carrier="Virgin Mobile SA Internet" mcc="655" mnc="07" apn="vdata" type="default,supl" />
+ <apn carrier="Virgin Mobile SA Internet" mcc="655" mnc="07" apn="vmms" mmsc="http://mms.virginmobile.co.za" mmsproxy="196.31.116.242" mmsport="8080" type="mms" />
+ <apn carrier="MTN SA Web" mcc="655" mnc="10" apn="internet" type="default,supl" />
+ <apn carrier="MTN ZA" mcc="655" mnc="10" apn="myMTN" user="mtn" password="mtn" server="*" type="default,supl" />
+ <apn carrier="MTN ZA MMS" mcc="655" mnc="10" apn="myMTN" user="mtnmms" password="mtnmms" mmsc="http://mms.mtn.co.za/mms/wapenc" mmsproxy="196.11.240.241" mmsport="8080" type="mms" />
+ <apn carrier="Movistar AG" mcc="722" mnc="007" apn="internet.unifon" user="wap" password="password" type="default,supl" />
+ <apn carrier="Movistar AG MMS" mcc="722" mnc="007" apn="mms.gprs.unifon.com.ar" user="mms" password="mms" mmsc="http://mms.tmovil.cl/" mmsproxy="200.068.032.239" mmsport="9201" type="mms" />
+ <apn carrier="CTI" mcc="722" mnc="310" apn="internet.ctimovil.com.ar" user="guest" password="guest" type="default,supl" />
+ <apn carrier="CTI MMS" mcc="722" mnc="310" apn="mms.ctimovil.com.ar" user="ctimms" password="ctimms999" mmsc="http://mms.ctimovil.com.ar" mmsproxy="170.051.255.240" mmsport="9201" type="mms" />
+ <apn carrier="Personal" mcc="722" mnc="34" apn="gprs.personal.com" user="gprs" type="default,supl" />
+ <apn carrier="Personal MMS" mcc="722" mnc="34" apn="mms" user="mms" password="mms" mmsc="http://mms.personal.com/" mmsproxy="172.025.007.031" mmsport="9201" type="mms" />
+ <apn carrier="TIM BR MMS" mcc="724" mnc="02" apn="mms.tim.br" user="tim" password="tim" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="mms" />
+ <apn carrier="TIM BR CONNECT FAST" mcc="724" mnc="02" apn="tim.br" user="tim" password="tim" mmsc="null" type="default,supl" />
+ <apn carrier="TIM BR MMS" mcc="724" mnc="03" apn="mms.tim.br" user="tim" password="tim" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="mms" />
+ <apn carrier="TIM BR CONNECT FAST" mcc="724" mnc="03" apn="tim.br" user="tim" password="tim" mmsc="null" type="default,supl" />
+ <apn carrier="TIM BR MMS" mcc="724" mnc="04" apn="mms.tim.br" user="tim" password="tim" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="mms" />
+ <apn carrier="TIM BR CONNECT FAST" mcc="724" mnc="04" apn="tim.br" user="tim" password="tim" mmsc="null" type="default,supl" />
+ <apn carrier="Claro BR" mcc="724" mnc="05" apn="claro.com.br" user="claro" password="claro" type="default,supl" />
+ <apn carrier="Claro BR MMS" mcc="724" mnc="05" apn="mms.claro.com.br" user="claro" password="claro" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" />
+ <apn carrier="Portal Claro" mcc="724" mnc="05" apn="wap.claro.com.br" user="claro" password="claro" proxy="200.169.126.11" port="8799" type="default,supl" />
+ <apn carrier="VIVO MMS" mcc="724" mnc="06" apn="mms.vivo.com.br" user="vivo" password="vivo" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" />
+ <apn carrier="VIVO ZAP" mcc="724" mnc="06" apn="zap.vivo.com.br" user="vivo" password="vivo" mmsc="null" type="default,supl" />
+ <apn carrier="SCTL MMS" mcc="724" mnc="07" apn="mms.sercomtel.com.br" user="sercomtel" password="sercomtel" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" />
+ <apn carrier="SCTL GPRS" mcc="724" mnc="07" apn="sercomtel.com.br" user="sercomtel" password="sercomtel" mmsc="null" type="default,supl" />
+ <apn carrier="VIVO MMS" mcc="724" mnc="10" apn="mms.vivo.com.br" user="vivo" password="vivo" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" />
+ <apn carrier="VIVO ZAP" mcc="724" mnc="10" apn="zap.vivo.com.br" user="vivo" password="vivo" mmsc="null" type="default,supl" />
+ <apn carrier="VIVO MMS" mcc="724" mnc="11" apn="mms.vivo.com.br" user="vivo" password="vivo" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" />
+ <apn carrier="VIVO ZAP" mcc="724" mnc="11" apn="zap.vivo.com.br" user="vivo" password="vivo" mmsc="null" type="default,supl" />
+ <apn carrier="BrT Internet" mcc="724" mnc="16" apn="brt.br" user="brt" password="brt" mmsc="null" type="default,supl" />
+ <apn carrier="BrT MMS" mcc="724" mnc="16" apn="mms.brt.br" user="brt" password="brt" mmsc="http://mms.brasiltelecom.com.br/" mmsproxy="200.96.8.29" mmsport="8080" type="mms" />
+ <apn carrier="Telemig GPRS" mcc="724" mnc="19" apn="gprs.telemigcelular.com.br" user="celular" password="celular" mmsc="null" type="default,supl" />
+ <apn carrier="Telemig MMS" mcc="724" mnc="19" apn="mmsgprs.telemigcelular.com.br" user="celular" password="celular" mmsc="http://mms.telemigcelular.com.br" mmsproxy="200.192.230.142" mmsport="8080" type="mms" />
+ <apn carrier="Telemig GPRS" mcc="724" mnc="23" apn="gprs.telemigcelular.com.br" user="celular" password="celular" mmsc="null" type="default,supl" />
+ <apn carrier="Telemig MMS" mcc="724" mnc="23" apn="mmsgprs.telemigcelular.com.br" user="celular" password="celular" mmsc="http://mms.telemigcelular.com.br" mmsproxy="200.192.230.142" mmsport="8080" type="mms" />
+ <apn carrier="Amazonia GPRS" mcc="724" mnc="24" apn="gprs.amazoniacelular.com.br" user="celular" password="celular" mmsc="null" type="default,supl" />
+ <apn carrier="Amazonia MMS" mcc="724" mnc="24" apn="mmsgprs.amazoniacelular.com.br" user="celular" password="celular" mmsc="http://mms.amazoniacelular.com.br" mmsproxy="200.192.230.142" mmsport="8080" type="mms" />
+ <apn carrier="Oi" mcc="724" mnc="31" apn="gprs.oi.com.br" user="oi" password="oi" mmsc="null" type="default,supl" />
+ <apn carrier="Oi MMS" mcc="724" mnc="31" apn="mmsgprs.oi.com.br" user="oimms" password="oioioi" mmsc="http://200.222.042.204:8002" mmsproxy="192.168.10.50" mmsport="3128" type="mms" />
+ <apn carrier="CTBC MMS" mcc="724" mnc="32" apn="mms.ctbc.br" user="ctbc" password="1212" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="mms" />
+ <apn carrier="CTBC MMS" mcc="724" mnc="33" apn="mms.ctbc.br" user="ctbc" password="1212" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="mms" />
+ <apn carrier="CTBC MMS" mcc="724" mnc="34" apn="mms.ctbc.br" user="ctbc" password="1212" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="mms" />
+ <apn carrier="Entel PCS" mcc="730" mnc="01" apn="bam.entelpcs.cl" user="entelpcs" password="entelpcs" proxy="10.99.0.10" port="8080" type="default,supl" />
+ <apn carrier="Entel MMS" mcc="730" mnc="01" apn="mms.entelpcs.cl" user="entelmms" password="entelpcs" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" />
+ <apn carrier="Claro CL" mcc="730" mnc="03" apn="bam.clarochile.cl" user="clarochile" password="clarochile" type="default,supl" />
+ <apn carrier="MMS CLARO" mcc="730" mnc="03" apn="mms.clarochile.cl" user="clarochile" password="clarochile" mmsc="http://mms.clarochile.cl" mmsproxy="172.23.200.200" mmsport="8080" type="mms" />
+ <apn carrier="Internet Movil" mcc="730" mnc="10" apn="bam.entelpcs.cl" user="entelpcs" password="entelpcs" proxy="10.99.0.10" port="8080" type="default,supl" />
+ <apn carrier="WEB EPCS" mcc="730" mnc="10" apn="imovil.entelpcs.cl" user="entelpcs" password="entelpcs" type="default,supl" />
+ <apn carrier="MMS EPCS" mcc="730" mnc="10" apn="mms.entelpcs.cl" user="entelmms" password="entelpcs" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" />
+ <apn carrier="Movistar CL MMS" mcc="730" mnc="10" apn="mms.tmovil.cl" user="mms" password="mms" mmsc="http://mms.tmovil.cl" mmsproxy="172.017.008.011" mmsport="9201" type="mms" />
+ <apn carrier="Movistar CL" mcc="730" mnc="10" apn="web.tmovil.cl" user="web" password="web" type="default,supl" />
+ <apn carrier="COMCEL" mcc="732" mnc="101" apn="internet.comcel.com.co" user="COMCELWEB" password="COMCELWEB" type="default,supl" />
+ <apn carrier="COMCEL MMS" mcc="732" mnc="101" apn="mms.comcel.com.co" user="COMCELMMS" password="*********" mmsc="http://mms.comcel.com.co/mms/" mmsproxy="198.228.90.225" mmsport="9201" type="mms" />
+ <apn carrier="Movistar CO" mcc="732" mnc="102" apn="internet.movistar.com.co" user="movistar" password="movistar" type="default,supl" />
+ <apn carrier="Tigo MMS" mcc="732" mnc="103" apn="mms.colombiamovil.com.co" user="mms-cm1900" password="mms-cm1900" mmsc="mmsc.colombiamovil.com.co" mmsproxy="190.102.206.48" mmsport="8080" type="mms" />
+ <apn carrier="Tigo" mcc="732" mnc="103" apn="web.colombiamovil.com.co" type="default,supl" />
+ <apn carrier="OLA" mcc="732" mnc="111" apn="internet" user="internet" password="internet" type="default,supl" />
+ <apn carrier="OLA MMS" mcc="732" mnc="111" apn="mms.comcel.com.co" mmsc="http://mms.ola.com.co" mmsproxy="200.058.228.081" mmsport="9201" type="mms" />
+ <apn carrier="Digitel" mcc="734" mnc="02" apn="gprsweb.digitel.com.ve" proxy="213.026.205.001" mmsc="http://expresate.digitel.com.ve" mmsproxy="213.026.205.001" mmsport="8080" type="default,supl,mms" />
+ <apn carrier="Movistar VE" mcc="734" mnc="04" apn="internet.movistar.ve" proxy="200.35.64.73" mmsc="http://mms.movistar.ve" mmsproxy="200.35.64.73" mmsport="9001" type="default,supl,mms" />
+ <apn carrier="Movilnet" mcc="734" mnc="06" apn="int.movilnet.com.ve" type="default,supl" />
+ <apn carrier="Movilnet MMS" mcc="734" mnc="06" apn="mm.movilnet.com.ve" mmsc="http://mms2.movilnet.com.ve/servlets/mms" mmsproxy="192.168.16.12" mmsport="8080" type="mms" />
+ <apn carrier="Movistar EC" mcc="740" mnc="00" apn="internet.movistar.com.ec" type="default,supl" />
+ <apn carrier="Porta EC" mcc="740" mnc="010" apn="internet.porta.com.ec" type="default,supl" />
+ <apn carrier="Ancel" mcc="748" mnc="01" apn="ancel" type="default,supl" />
+ <apn carrier="Ancel MMS" mcc="748" mnc="01" apn="mms" mmsc="http://mmsc.mms.ancelutil.com.uy" mmsproxy="200.40.246.2" mmsport="3128" type="mms" />
+ <apn carrier="Movistar UY MMS" mcc="748" mnc="07" apn="apnmms.movistar.com.uy" user="mmsuy" password="mmsuy" mmsc="http://mmsc.movistar.com.uy" mmsproxy="010.000.002.029" mmsport="9201" type="mms" />
+ <apn carrier="Movistar UY" mcc="748" mnc="07" apn="apnumt.movistar.com.uy" user="movistar" password="movistar" type="default,supl" />
+ <apn carrier="Claro UY" mcc="748" mnc="10" apn="gprs.claro.com.uy" user="ctigpr" password="ctigpr999" type="default,supl" />
+ <apn carrier="Claro UY MMS" mcc="748" mnc="10" apn="mms.ctimovil.com.uy" user="ctimms" password="ctimms999" mmsc="http://mms.ctimovil.com.uy" mmsproxy="170.051.255.240" mmsport="9201" type="mms" />
+ <apn carrier="Wap OPT KNC" mcc="546" mnc="01" apn="wap" user="Wap" password="Wap123" proxy="192.168.39.101" port="3130" type="default,supl" />
+ <apn carrier="Mms OPT KNC" mcc="546" mnc="01" apn="mms" user="mms" password="mms123" mmsproxy="192.168.39.201" mmsport="3130" mmsc="http://mms.mobitag.nc/mmsc/" type="mms" />
+ <apn carrier="Internet OPT KNC" mcc="546" mnc="01" apn="internet" user="internet" type="default,supl" />
+</apns>
diff --git a/libcamera/Android.mk b/libcamera/Android.mk
deleted file mode 100644
index fb274e8..0000000
--- a/libcamera/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= LibCameraWrapper.cpp
-
-LOCAL_SHARED_LIBRARIES:= libdl libutils libcutils libcamera_client
-
-LOCAL_MODULE := libcamera
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_PRELINK_MODULE := false
-
-ifdef BOARD_SECOND_CAMERA_DEVICE
- LOCAL_CFLAGS += -DFFC_PRESENT
-endif
-
-include $(BUILD_SHARED_LIBRARY)
-
diff --git a/libcamera/LibCameraWrapper.cpp b/libcamera/LibCameraWrapper.cpp
deleted file mode 100644
index a34c9b2..0000000
--- a/libcamera/LibCameraWrapper.cpp
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Adapted from JordanCameraWrapper
-
-// We can't use CameraParameters constants because we're linking against
-// Samsung's libcamera_client.so
-
-#define LOG_TAG "LibCameraWrapper"
-//#define LOG_NDEBUG 0
-
-#include <cmath>
-#include <dlfcn.h>
-#include <fcntl.h>
-#include <linux/videodev2.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <camera/Camera.h>
-#include "LibCameraWrapper.h"
-
-namespace android {
-
-typedef sp<CameraHardwareInterface> (*OpenCamFunc)(int);
-typedef void (*GetCamInfo)(int, struct CameraInfo*);
-
-static void * g_libHandle = NULL;
-static OpenCamFunc g_openCameraHardware = NULL;
-static GetCamInfo g_getCameraInfo = NULL;
-
-static const int CAMERA_CMD_SET_OBJECT_TRACKING_POSITION = 1103;
-static const int CAMERA_CMD_SET_TOUCH_AF = 1105;
-
-static void ensureLibOpened()
-{
- if (g_libHandle == NULL) {
- g_libHandle = ::dlopen("libsamsungcamera.so", RTLD_NOW);
- if (g_libHandle == NULL) {
- assert(0);
- LOGE("dlopen() error: %s\n", dlerror());
- } else {
- g_openCameraHardware = (OpenCamFunc) ::dlsym(g_libHandle, "HAL_openCameraHardware");
- g_getCameraInfo = (GetCamInfo) ::dlsym(g_libHandle, "HAL_getCameraInfo");
- assert(g_openCameraHardware != NULL);
- }
- }
-}
-
-extern "C" int HAL_getNumberOfCameras()
-{
-#ifdef FFC_PRESENT
- return 2;
-#else
- return 1;
-#endif
-}
-
-extern "C" void HAL_getCameraInfo(int cameraId, struct CameraInfo* cameraInfo)
-{
- ensureLibOpened();
- g_getCameraInfo(cameraId, cameraInfo);
-}
-
-extern "C" sp<CameraHardwareInterface> HAL_openCameraHardware(int cameraId)
-{
- LOGV("openCameraHardware: call createInstance");
- ensureLibOpened();
- return LibCameraWrapper::createInstance(cameraId);
-}
-
-wp<CameraHardwareInterface> LibCameraWrapper::singleton[2] = { 0 };
-
-sp<CameraHardwareInterface> LibCameraWrapper::createInstance(int cameraId)
-{
- LOGV("%s :", __func__);
- if (singleton[cameraId] != NULL) {
- sp<CameraHardwareInterface> hardware = singleton[cameraId].promote();
- if (hardware != NULL) {
- return hardware;
- }
- }
-
- ensureLibOpened();
-
- sp<CameraHardwareInterface> hardware(new LibCameraWrapper(cameraId));
- singleton[cameraId] = hardware;
- return hardware;
-}
-
-LibCameraWrapper::LibCameraWrapper(int cameraId) :
- mLibInterface(g_openCameraHardware(cameraId)),
- mCameraId(cameraId),
- mVideoMode(false),
- mContinuousAf(false),
- mFixFocus(false),
- mTouchFocus(false)
-{
- LOGV("%s :", __func__);
-}
-
-LibCameraWrapper::~LibCameraWrapper()
-{
- LOGV("%s :", __func__);
-}
-
-sp<IMemoryHeap>
-LibCameraWrapper::getPreviewHeap() const
-{
- LOGV("%s :", __func__);
- return mLibInterface->getPreviewHeap();
-}
-
-sp<IMemoryHeap>
-LibCameraWrapper::getRawHeap() const
-{
- LOGV("%s :", __func__);
- return mLibInterface->getRawHeap();
-}
-
-void
-LibCameraWrapper::setCallbacks(notify_callback notify_cb,
- data_callback data_cb,
- data_callback_timestamp data_cb_timestamp,
- void* user)
-{
- LOGV("%s :", __func__);
- mLibInterface->setCallbacks(notify_cb, data_cb, data_cb_timestamp, user);
-}
-
-void
-LibCameraWrapper::enableMsgType(int32_t msgType)
-{
- LOGV("%s :", __func__);
- mLibInterface->enableMsgType(msgType);
-}
-
-void
-LibCameraWrapper::disableMsgType(int32_t msgType)
-{
- LOGV("%s :", __func__);
- mLibInterface->disableMsgType(msgType);
-}
-
-bool
-LibCameraWrapper::msgTypeEnabled(int32_t msgType)
-{
- LOGV("%s :", __func__);
- return mLibInterface->msgTypeEnabled(msgType);
-}
-
-status_t
-LibCameraWrapper::startPreview()
-{
- LOGV("%s :", __func__);
- status_t ret = mLibInterface->startPreview();
-
- if (mFixFocus) {
- LOGV("Fix focus mode");
- // We need to switch the focus mode once after switching from video or the camera won't work.
- // Note: If the previous mode was macro, then it actually doesn't matter since the bug doesn't affect that case.
- CameraParameters pars = mLibInterface->getParameters();
- const char *prevFocusMode = pars.get("focus-mode");
- pars.set("focus-mode", "macro");
- mLibInterface->setParameters(pars);
- pars.set("focus-mode", prevFocusMode);
- mLibInterface->setParameters(pars);
- mFixFocus = false;
- }
-
- return ret;
-}
-
-bool
-LibCameraWrapper::useOverlay()
-{
- LOGV("%s :", __func__);
- return mLibInterface->useOverlay();
-}
-
-status_t
-LibCameraWrapper::setOverlay(const sp<Overlay> &overlay)
-{
- LOGV("%s :", __func__);
- return mLibInterface->setOverlay(overlay);
-}
-
-void
-LibCameraWrapper::stopPreview()
-{
- LOGV("%s :", __func__);
- mLibInterface->stopPreview();
-}
-
-bool
-LibCameraWrapper::previewEnabled()
-{
- LOGV("%s :", __func__);
- return mLibInterface->previewEnabled();
-}
-
-status_t
-LibCameraWrapper::startRecording()
-{
- LOGV("%s :", __func__);
- return mLibInterface->startRecording();
-}
-
-void
-LibCameraWrapper::stopRecording()
-{
- LOGV("%s :", __func__);
- mLibInterface->stopRecording();
-}
-
-bool
-LibCameraWrapper::recordingEnabled()
-{
- LOGV("%s :", __func__);
- return mLibInterface->recordingEnabled();
-}
-
-void
-LibCameraWrapper::releaseRecordingFrame(const sp<IMemory>& mem)
-{
- LOGV("%s :", __func__);
- return mLibInterface->releaseRecordingFrame(mem);
-}
-
-status_t
-LibCameraWrapper::autoFocus()
-{
- LOGV("%s :", __func__);
- return mLibInterface->autoFocus();
-}
-
-status_t
-LibCameraWrapper::cancelAutoFocus()
-{
- LOGV("%s :", __func__);
- return mLibInterface->cancelAutoFocus();
-}
-
-status_t
-LibCameraWrapper::takePicture()
-{
- LOGV("%s :", __func__);
- return mLibInterface->takePicture();
-}
-
-status_t
-LibCameraWrapper::cancelPicture()
-{
- LOGV("%s :", __func__);
- return mLibInterface->cancelPicture();
-}
-
-status_t
-LibCameraWrapper::setParameters(const CameraParameters& params)
-{
- LOGV("%s :", __func__);
- CameraParameters pars(params.flatten());
-
- if (mCameraId == 0) {
- const char *metering;
- const char *conAf;
- const char *touchCoordinate;
- bool prevContinuousAf;
-
- /*
- * getInt returns -1 if the value isn't present and 0 on parse failure,
- * so if it's larger than 0, we can be sure the value was parsed properly
- */
- mVideoMode = pars.getInt("cam-mode") > 0;
- pars.remove("cam-mode");
-
- if (mVideoMode) {
- // Special settings in video mode
- pars.set("video_recording_gamma", "on");
- pars.set("slow_ae", "on");
- pars.set("iso", "movie");
- pars.set("metering", "matrix");
- }
- else {
- pars.set("video_recording_gamma", "off");
- pars.set("slow_ae", "off");
- }
-
- // Parse continuous autofocus into a format the driver understands
- conAf = pars.get("enable-caf");
- prevContinuousAf = mContinuousAf;
- mContinuousAf = (conAf != 0 && strcmp(conAf, "on") == 0);
- pars.set("continuous_af", mContinuousAf ? 1 : 0);
-
- if (prevContinuousAf && !mContinuousAf) {
- mFixFocus = true;
- }
-
- // Always set antibanding to 50hz
- pars.set("antibanding", "50hz");
-
- // Parse metering into something the driver understands
- metering = pars.get("meter-mode");
- if (metering != 0) {
- if (strcmp(metering, "meter-center") == 0) {
- pars.set("metering", "center");
- }
- else if (strcmp(metering, "meter-spot") == 0) {
- pars.set("metering", "spot");
- }
- else if (strcmp(metering, "meter-matrix") == 0) {
- pars.set("metering", "matrix");
- }
- pars.remove("meter-mode");
- }
-
- // Read touch-to-focus
- touchCoordinate = pars.get("touch-focus");
- if (touchCoordinate != 0) {
- int width, height;
- int x, y;
- char *comma;
- x = mTouchFocusX = strtol(touchCoordinate, &comma, 10);
- y = mTouchFocusY = strtol(comma + 1, NULL, 10);
-
- pars.getPreviewSize(&width, &height);
- if (fabs((float)width/height - 1.66) > 0.1) {
- LOGV("Non-widescreen touch focus");
- x += 80; // Only aries' Camera needs this for non-widescreen
- }
-
- sendCommand(CAMERA_CMD_SET_TOUCH_AF, 0, 0);
- sendCommand(CAMERA_CMD_SET_OBJECT_TRACKING_POSITION, x, y);
- sendCommand(CAMERA_CMD_SET_TOUCH_AF, 1, 0);
-
- mTouchFocus = true;
- pars.remove("touch-focus");
- }
- else if (mTouchFocus) {
- LOGV("Disabling touch focus");
- sendCommand(CAMERA_CMD_SET_TOUCH_AF, 0, 0);
- mTouchFocus = false;
- }
-
- }
-
- return mLibInterface->setParameters(pars);
-}
-
-CameraParameters
-LibCameraWrapper::getParameters() const
-{
- LOGV("%s :", __func__);
- CameraParameters ret = mLibInterface->getParameters();
-
- if (mCameraId == 0) {
- // The only value of antibanding supported is 50hz. Let's not say we support anything
- ret.remove("antibanding-values");
-
- // We support facedetect as well
- ret.set("focus-mode-values", "auto,macro,facedetect");
-
- // Auto-exposure modes. NOTE: matrix isn't a value supported in stock android
- ret.set("meter-mode-values", "meter-center,meter-spot,meter-matrix");
-
- // ISO values. The driver fails to return any of this.
- ret.set("iso-values", "auto,50,100,200,400,800,1600,3200,sports,night,movie");
-
- // Scene modes. The driver fails to return its proper supported values.
- ret.set("scene-mode-values", "auto,portrait,landscape,sports,sunset,dusk-dawn,fireworks,beach,party,night,fall-color,text,candlelight,back-light");
-
- // This is for detecting if we're in camcorder mode or not
- ret.set("cam-mode", mVideoMode ? "1" : "0");
-
- // Continuous AF
- ret.set("enable-caf", mContinuousAf ? "on" : "off");
-
- // Touch-to-focus
- if (mTouchFocus) {
- if (mTouchFocusX > 9999 || mTouchFocusY > 9999) {
- LOGE("ERROR: Touch focus X, Y coordinate too large.");
- ret.set("touch-focus", "");
- }
- else {
- char touchfocus[10] = "";
- sprintf(touchfocus, "%d,%d", mTouchFocusX, mTouchFocusY);
- ret.set("touch-focus", touchfocus);
- }
- }
- else {
- ret.set("touch-focus", "");
- }
- }
- else if (mCameraId == 1) {
- // FFC: We need more preview and picture size to support GTalk
- ret.set("preview-size-values", "176x144,320x240,640x480");
- ret.set("picture-size-values", "176x144,320x240,640x480");
- }
-
- return ret;
-}
-
-status_t
-LibCameraWrapper::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2)
-{
- LOGV("%s :", __func__);
- return mLibInterface->sendCommand(cmd, arg1, arg2);
-}
-
-void
-LibCameraWrapper::release()
-{
- LOGV("%s :", __func__);
- mLibInterface->release();
-}
-
-status_t
-LibCameraWrapper::dump(int fd, const Vector<String16>& args) const
-{
- LOGV("%s :", __func__);
- return mLibInterface->dump(fd, args);
-}
-
-}; //namespace android
diff --git a/libcamera/LibCameraWrapper.h b/libcamera/LibCameraWrapper.h
deleted file mode 100644
index 79c7586..0000000
--- a/libcamera/LibCameraWrapper.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef ANDROID_HARDWARE_LIB_CAMERA_WRAPPER_H
-#define ANDROID_HARDWARE_LIB_CAMERA_WRAPPER_H
-
-#include <camera/CameraHardwareInterface.h>
-
-namespace android {
-
-class LibCameraWrapper : public CameraHardwareInterface {
-public:
- virtual sp<IMemoryHeap> getPreviewHeap() const;
- virtual sp<IMemoryHeap> getRawHeap() const;
-
- virtual void setCallbacks(notify_callback notify_cb,
- data_callback data_cb,
- data_callback_timestamp data_cb_timestamp,
- void *user);
-
- virtual void enableMsgType(int32_t msgType);
- virtual void disableMsgType(int32_t msgType);
- virtual bool msgTypeEnabled(int32_t msgType);
-
- virtual status_t startPreview();
- virtual bool useOverlay();
- virtual status_t setOverlay(const sp<Overlay> &overlay);
- virtual void stopPreview();
- virtual bool previewEnabled();
-
- virtual status_t startRecording();
- virtual void stopRecording();
- virtual bool recordingEnabled();
- virtual void releaseRecordingFrame(const sp<IMemory> &mem);
-
- virtual status_t autoFocus();
- virtual status_t cancelAutoFocus();
- virtual status_t takePicture();
- virtual status_t cancelPicture();
- virtual status_t dump(int fd, const Vector<String16> &args) const;
- virtual status_t setParameters(const CameraParameters& params);
- virtual CameraParameters getParameters() const;
- virtual status_t sendCommand(int32_t command, int32_t arg1,
- int32_t arg2);
- virtual void release();
-
- static sp<CameraHardwareInterface> createInstance(int cameraId);
-
-private:
- LibCameraWrapper(int CameraId);
- virtual ~LibCameraWrapper();
-
- sp<CameraHardwareInterface> mLibInterface;
- int mCameraId;
- bool mVideoMode;
- bool mContinuousAf;
- bool mFixFocus;
- bool mTouchFocus;
- int mTouchFocusX;
- int mTouchFocusY;
-
- static wp<CameraHardwareInterface> singleton[2];
-
-};
-
-}; // namespace android
-
-#endif
diff --git a/liboverlay/Android.mk b/liboverlay/Android.mk
deleted file mode 100644
index c4de48c..0000000
--- a/liboverlay/Android.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2008 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-# HAL module implemenation, not prelinked and stored in
-# hw/<COPYPIX_HARDWARE_MODULE_ID>.<ro.product.board>.so
-
-include $(CLEAR_VARS)
-LOCAL_PRELINK_MODULE := false
-LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
-LOCAL_SHARED_LIBRARIES := liblog libcutils
-
-ifdef BOARD_V4L2_DEVICE
- LOCAL_CFLAGS += -DV4L2_DEVICE=\"$(BOARD_V4L2_DEVICE)\"
-endif
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH)/../include
-
-LOCAL_SRC_FILES := v4l2_utils.c overlay.cpp
-
-LOCAL_MODULE := overlay.aries
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_SHARED_LIBRARY)
diff --git a/liboverlay/overlay.cpp b/liboverlay/overlay.cpp
deleted file mode 100644
index d0a4289..0000000
--- a/liboverlay/overlay.cpp
+++ /dev/null
@@ -1,1490 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*#define LOG_NDEBUG 0*/
-#define LOG_TAG "SEC_Overlay"
-
-#include <hardware/hardware.h>
-#include <hardware/overlay.h>
-
-extern "C" {
-#include "v4l2_utils.h"
-}
-
-#include <pthread.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#include <linux/videodev.h>
-
-#include <cutils/log.h>
-#include <cutils/ashmem.h>
-#include <cutils/atomic.h>
-
-#include "linux/fb.h"
-
-/*****************************************************************************/
-
-#define LOG_FUNCTION_NAME LOGV(" %s %s", __FILE__, __func__)
-
-#define NUM_OVERLAY_BUFFERS_REQUESTED (3)
-/* OVRLYSHM on phone keypad*/
-#define SHARED_DATA_MARKER (0x68759746)
-
-/* These values should come from Surface Flinger */
-unsigned int g_lcd_width = 480;
-unsigned int g_lcd_height = 800;
-unsigned int g_lcd_bpp = 32;
-
-#define CACHEABLE_BUFFERS 0x1
-
-/* shared with Camera/Video Playback HAL */
-#define ALL_BUFFERS_FLUSHED -66
-
-uint32_t phyAddr;
-s5p_fimc_t g_s5p_fimc;
-
-typedef struct
-{
- uint32_t posX;
- uint32_t posY;
- uint32_t posW;
- uint32_t posH;
- uint32_t rotation;
- uint32_t flip;
-
- uint32_t posX_org;
- uint32_t posY_org;
- uint32_t posW_org;
- uint32_t posH_org;
-
-} overlay_ctrl_t;
-
-typedef struct
-{
- uint32_t cropX;
- uint32_t cropY;
- uint32_t cropW;
- uint32_t cropH;
-} overlay_data_t;
-
-typedef struct
-{
- uint32_t marker;
- uint32_t size;
-
- volatile int32_t refCnt;
-
- uint32_t controlReady; /* Only updated by the control side */
- uint32_t dataReady; /* Only updated by the data side */
-
- pthread_mutex_t lock;
- pthread_mutexattr_t attr;
-
- uint32_t streamEn;
- uint32_t streamingReset;
-
- uint32_t dispW;
- uint32_t dispH;
-
-} overlay_shared_t;
-
-/* Only one instance is created per platform */
-struct overlay_control_context_t {
- struct overlay_control_device_t device;
- /* our private state goes below here */
- struct overlay_t* overlay_video1;
- struct overlay_t* overlay_video2;
-};
-
-/* A separate instance is created per overlay data side user*/
-struct overlay_data_context_t {
- struct overlay_data_device_t device;
- /* our private state goes below here */
- int ctl_fd;
- int shared_fd;
- int shared_size;
- int width;
- int height;
- int format;
- int num_buffers;
- size_t *buffers_len;
- void **buffers;
-
- overlay_data_t data;
- overlay_shared_t *shared;
- struct mapping_data *mapping_data;
- /* Need to count Qd buffers
- to be sure we don't block DQ'ing when exiting */
- int qd_buf_count;
- int cacheable_buffers;
-
- bool zerocopy;
-};
-
-static int create_shared_data(overlay_shared_t **shared);
-static void destroy_shared_data(int shared_fd, overlay_shared_t *shared,
- bool closefd);
-static int open_shared_data(overlay_data_context_t *ctx);
-static void close_shared_data(overlay_data_context_t *ctx);
-enum { LOCK_REQUIRED = 1, NO_LOCK_NEEDED = 0 };
-static int enable_streaming(overlay_shared_t *shared, int ovly_fd,
- int lock_required );
-
-static int overlay_device_open(const struct hw_module_t* module,
- const char* name, struct hw_device_t** device);
-
-static int check_fimc_dst_constraints(s5p_fimc_t *s5p_fimc,
- unsigned int rotation);
-static int check_fimc_src_constraints(s5p_fimc_t *s5p_fimc);
-
-static struct hw_module_methods_t overlay_module_methods = {
-open: overlay_device_open
-};
-
-struct overlay_module_t HAL_MODULE_INFO_SYM = {
-common: {
-tag: HARDWARE_MODULE_TAG,
- version_major: 1,
- version_minor: 0,
- id: OVERLAY_HARDWARE_MODULE_ID,
- name: "SEC Overlay module",
- author: "The Android Open Source Project",
- methods: &overlay_module_methods,
- }
-};
-
-/*****************************************************************************/
-
-/*
- * This is the overlay_t object, it is returned to the user and represents
- * an overlay. here we use a subclass, where we can store our own state.
- * This handles will be passed across processes and possibly given to other
- * HAL modules (for instance video decode modules).
- */
-struct handle_t : public native_handle {
- /* add the data fields we need here, for instance: */
- int ctl_fd;
- int shared_fd;
- int width;
- int height;
- int format;
- int num_buffers;
- int shared_size;
-};
-
-static int handle_format(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->format;
-}
-
-static int handle_ctl_fd(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->ctl_fd;
-}
-
-static int handle_shared_fd(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->shared_fd;
-}
-
-static int handle_num_buffers(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->num_buffers;
-}
-
-static int handle_width(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->width;
-}
-
-static int handle_height(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->height;
-}
-
-static int handle_shared_size(const overlay_handle_t overlay) {
- return static_cast<const struct handle_t *>(overlay)->shared_size;
-}
-
-/* A separate instance of this class is created per overlay */
-class overlay_object : public overlay_t
-{
- handle_t mHandle;
-
- overlay_ctrl_t mCtl;
- overlay_ctrl_t mCtlStage;
- overlay_shared_t *mShared;
-
- static overlay_handle_t getHandleRef(struct overlay_t* overlay) {
- /* returns a reference to the handle, caller doesn't take ownership */
- return &(static_cast<overlay_object *>(overlay)->mHandle);
- }
-
- public:
- overlay_object(int ctl_fd, int shared_fd, int shared_size, int w, int h,
- int format, int num_buffers) {
- this->overlay_t::getHandleRef = getHandleRef;
- mHandle.version = sizeof(native_handle);
- mHandle.numFds = 2;
- mHandle.numInts = 5; /* extra ints we have in our handle */
- mHandle.ctl_fd = ctl_fd;
- mHandle.shared_fd = shared_fd;
- mHandle.width = w;
- mHandle.height = h;
- mHandle.format = format;
- mHandle.num_buffers = num_buffers;
- mHandle.shared_size = shared_size;
- this->w = w;
- this->h = h;
- this->format = format;
-
- memset( &mCtl, 0, sizeof( mCtl ) );
- memset( &mCtlStage, 0, sizeof( mCtlStage ) );
- }
-
- int ctl_fd() { return mHandle.ctl_fd; }
- int shared_fd() { return mHandle.shared_fd; }
- overlay_ctrl_t* data() { return &mCtl; }
- overlay_ctrl_t* staging() { return &mCtlStage; }
- overlay_shared_t* getShared() { return mShared; }
- void setShared( overlay_shared_t *p ) { mShared = p; }
-};
-
-/*****************************************************************************
- * Local Functions
- *****************************************************************************/
-
-static int create_shared_data(overlay_shared_t **shared)
-{
- int fd;
- /* assuming sizeof(overlay_shared_t) < a single page */
- int size = getpagesize();
- overlay_shared_t *p;
-
- if ((fd = ashmem_create_region("overlay_data", size)) < 0) {
- LOGE("Failed to Create Overlay Shared Data!\n");
- return fd;
- }
-
- p = (overlay_shared_t*)mmap(NULL, size, PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (p == MAP_FAILED) {
- LOGE("Failed to Map Overlay Shared Data!\n");
- close(fd);
- return -1;
- }
-
- memset(p, 0, size);
- p->marker = SHARED_DATA_MARKER;
- p->size = size;
- p->refCnt = 1;
- if (pthread_mutexattr_init(&p->attr) != 0) {
- LOGE("Failed to initialize overlay mutex attr");
- goto MutexAttrErr;
- }
- if (pthread_mutexattr_setpshared(&p->attr, PTHREAD_PROCESS_SHARED) != 0) {
- LOGE("Failed to set the overlay mutex attr to be shared across-processes");
- goto MutexAttrSetErr;
- }
- if (pthread_mutex_init(&p->lock, &p->attr) != 0) {
- LOGE("Failed to initialize overlay mutex\n");
- goto MutexErr;
- }
-
- *shared = p;
- return fd;
-
-MutexErr:
-MutexAttrSetErr:
- pthread_mutexattr_destroy(&p->attr);
-MutexAttrErr:
- munmap(p, size);
- close(fd);
- return -1;
-}
-
-static void destroy_shared_data(int shared_fd, overlay_shared_t *shared,
- bool closefd )
-{
- if (shared == NULL)
- return;
-
- /* Last side deallocated releases the mutex, otherwise the remaining */
- /* side will deadlock trying to use an already released mutex */
- if (android_atomic_dec(&shared->refCnt) == 1) {
- if (pthread_mutex_destroy(&shared->lock)) {
- LOGE("Failed to uninitialize overlay mutex!\n");
- }
-
- if (pthread_mutexattr_destroy(&shared->attr)) {
- LOGE("Failed to uninitialize the overlay mutex attr!\n");
- }
- shared->marker = 0;
- }
-
- if (munmap(shared, shared->size)) {
- LOGE("Failed to Unmap Overlay Shared Data!\n");
- }
-
- if (closefd && close(shared_fd)) {
- LOGE("Failed to Close Overlay Shared Data!\n");
- }
-}
-
-static int open_shared_data( overlay_data_context_t *ctx )
-{
- int rc = -1;
- int mode = PROT_READ | PROT_WRITE;
- int fd = ctx->shared_fd;
- int size = ctx->shared_size;
-
- if (ctx->shared != NULL) {
- /* Already open, return success */
- LOGI("Overlay Shared Data Already Open\n");
- return 0;
- }
- ctx->shared = (overlay_shared_t*)mmap(0, size, mode, MAP_SHARED, fd, 0);
-
- if (ctx->shared == MAP_FAILED) {
- LOGE("Failed to Map Overlay Shared Data!\n");
- } else if ( ctx->shared->marker != SHARED_DATA_MARKER ) {
- LOGE("Invalid Overlay Shared Marker!\n");
- munmap( ctx->shared, size);
- } else if ( (int)ctx->shared->size != size ) {
- LOGE("Invalid Overlay Shared Size!\n");
- munmap(ctx->shared, size);
- } else {
- android_atomic_inc(&ctx->shared->refCnt);
- rc = 0;
- }
-
- return rc;
-}
-
-static void close_shared_data(overlay_data_context_t *ctx)
-{
- destroy_shared_data(ctx->shared_fd, ctx->shared, false);
- ctx->shared = NULL;
-}
-
-static int enable_streaming_locked(overlay_shared_t *shared, int ovly_fd)
-{
- int rc = 0;
-
- if (!shared->controlReady || !shared->dataReady) {
- LOGI("Postponing Stream Enable/%d/%d\n", shared->controlReady,
- shared->dataReady);
- } else {
- shared->streamEn = 1;
- rc = v4l2_overlay_stream_on(ovly_fd);
- if (rc) {
- LOGE("Stream Enable Failed!/%d\n", rc);
- shared->streamEn = 0;
- }
- }
-
- return rc;
-}
-
-static int enable_streaming(overlay_shared_t *shared, int ovly_fd)
-{
- int ret;
-
- pthread_mutex_lock(&shared->lock);
- ret = enable_streaming_locked(shared, ovly_fd);
- pthread_mutex_unlock(&shared->lock);
- return ret;
-}
-
-static int disable_streaming_locked(overlay_shared_t *shared, int ovly_fd)
-{
- int ret = 0;
-
- if (shared->streamEn) {
- ret = v4l2_overlay_stream_off( ovly_fd );
- if (ret) {
- LOGE("Stream Off Failed!/%d\n", ret);
- } else {
- shared->streamingReset = 1;
- shared->streamEn = 0;
- }
- }
-
- return ret;
-}
-
-static void set_color_space(unsigned int overlay_color_format, unsigned int *v4l2_color_format)
-{
- switch (overlay_color_format) {
- case OVERLAY_FORMAT_RGB_565:
- *v4l2_color_format = V4L2_PIX_FMT_RGB565;
- break;
-
- case OVERLAY_FORMAT_YCbYCr_422_I:
- case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
- *v4l2_color_format = V4L2_PIX_FMT_YUYV;
- break;
-
- case OVERLAY_FORMAT_CbYCrY_422_I:
- case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
- *v4l2_color_format = V4L2_PIX_FMT_UYVY;
- break;
-
- case HAL_PIXEL_FORMAT_YCbCr_420_P:
- *v4l2_color_format = V4L2_PIX_FMT_YUV420;
- break;
-
- case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
- *v4l2_color_format = V4L2_PIX_FMT_NV12T;
- break;
-
- case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
- *v4l2_color_format = V4L2_PIX_FMT_NV21;
- break;
-
- default :
- LOGE("unsupported pixel format (0x%x)", overlay_color_format);
- *v4l2_color_format = -1;
- }
-}
-
-/****************************************************************************
- * Control module
- *****************************************************************************/
-
-static int overlay_get(struct overlay_control_device_t *dev, int name)
-{
- int result = -1;
-
- switch (name) {
- /* 0 = no limit */
- case OVERLAY_MINIFICATION_LIMIT: result = 0; break;
- /* 0 = no limit */
- case OVERLAY_MAGNIFICATION_LIMIT: result = 0; break;
- /* 0 = infinite */
- case OVERLAY_SCALING_FRAC_BITS: result = 0; break;
- /* 90 rotation steps (for instance) */
- case OVERLAY_ROTATION_STEP_DEG: result = 90; break;
- /* 1-pixel alignment */
- case OVERLAY_HORIZONTAL_ALIGNMENT: result = 1; break;
- /* 1-pixel alignment */
- case OVERLAY_VERTICAL_ALIGNMENT: result = 1; break;
- /* 1-pixel alignment */
- case OVERLAY_WIDTH_ALIGNMENT: result = 1; break;
- case OVERLAY_HEIGHT_ALIGNMENT: break;
- }
-
- return result;
-}
-
-static int get_fb_var_screeninfo( struct fb_var_screeninfo *info )
-{
- int fd = -1;
- int i=0;
- char name[64];
- int ret = 0;
-
- char const * const device_template[] = {
- "/dev/graphics/fb%u",
- "/dev/fb%u",
- 0 };
-
- while ((fd==-1) && device_template[i]) {
- snprintf(name, 64, device_template[i], 0);
- fd = open(name, O_RDWR, 0);
- i++;
- }
-
- if (fd < 0)
- ret = -EINVAL;
-
- if (ioctl(fd, FBIOGET_VSCREENINFO, info) == -1)
- ret = -EINVAL;
-
- if (fd > 0)
- close(fd);
-
- return 0;
-}
-static overlay_t* overlay_createOverlay(struct overlay_control_device_t *dev,
- uint32_t w, uint32_t h, int32_t format)
-{
- LOGD("overlay_createOverlay:IN w=%d h=%d format=%d\n", w, h, format);
- LOG_FUNCTION_NAME;
-
- overlay_object *overlay;
- overlay_control_context_t *ctx = (overlay_control_context_t *)dev;
- overlay_shared_t *shared;
-
- int ret;
- uint32_t num = NUM_OVERLAY_BUFFERS_REQUESTED;
- int fd;
- int shared_fd;
- struct fb_var_screeninfo info;
- bool zerocopy = false;
-
- phyAddr = 0;
-
- if (format == OVERLAY_FORMAT_DEFAULT) {
- LOGD("format == OVERLAY_FORMAT_DEFAULT\n");
- LOGD("set to HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP\n");
- format = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP;
- }
-
- if (ctx->overlay_video1) {
- LOGE("Error - overlays already in use\n");
- return NULL;
- }
-
- shared_fd = create_shared_data(&shared);
- if (shared_fd < 0) {
- LOGE("Failed to create shared data");
- return NULL;
- }
-
- fd = v4l2_overlay_open(V4L2_OVERLAY_PLANE_VIDEO1);
- if (fd < 0) {
- LOGE("Failed to open overlay device : %s\n", strerror(errno));
- goto error;
- }
-
- g_s5p_fimc.params.src.full_width = w;
- g_s5p_fimc.params.src.full_height = h;
- g_s5p_fimc.params.src.width = w;
- g_s5p_fimc.params.src.height = h;
- set_color_space(format, &g_s5p_fimc.params.src.color_space);
- ret = check_fimc_src_constraints(&g_s5p_fimc);
- if(ret != 0) {
- if(ret < 0) {
- LOGE("Not supported source image size");
- goto error1;
- } else {
- LOGD("src width, height are changed [w= %d, h= %d]->[w=%d, h= %d]"
- , w, h, g_s5p_fimc.params.src.width
- , g_s5p_fimc.params.src.height);
- w = g_s5p_fimc.params.src.width;
- h = g_s5p_fimc.params.src.height;
- }
- }
-
- if (v4l2_overlay_init(fd, w, h, format, phyAddr)) {
- LOGE("Failed initializing overlays\n");
- goto error1;
- }
-
- if (v4l2_overlay_set_crop(fd, 0, 0, w, h)) {
- LOGE("Failed defaulting crop window\n");
- goto error1;
- }
-
- if (v4l2_overlay_set_flip(fd, 0)) {
- LOGE("Failed defaulting flip\n");
- goto error1;
- }
-
- if (v4l2_overlay_set_rotation(fd, 0, 0)) {
- LOGE("Failed defaulting rotation\n");
- goto error1;
- }
-
- if (format >= HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP
- && format < HAL_PIXEL_FORMAT_CUSTOM_MAX)
- zerocopy = true;
-
- if (v4l2_overlay_req_buf(fd, &num, 0, (int)zerocopy)) {
- LOGE("Failed requesting buffers\n");
- goto error1;
- }
-
- v4l2_overlay_init_fimc(fd, &g_s5p_fimc);
-
- overlay = new overlay_object(fd, shared_fd, shared->size,
- w, h, format, num);
- if (overlay == NULL) {
- LOGE("Failed to create overlay object\n");
- goto error1;
- }
- ctx->overlay_video1 = overlay;
-
- overlay->setShared(shared);
-
- shared->controlReady = 0;
- shared->streamEn = 0;
- shared->streamingReset = 0;
-
- /* get lcd size from kernel framebuffer */
- if(get_fb_var_screeninfo(&info) == 0) {
- shared->dispW = info.xres;
- shared->dispH = info.yres;
- g_lcd_width = info.xres;
- g_lcd_height = info.yres;
- g_lcd_bpp = info.bits_per_pixel;
- } else {
- shared->dispW = g_lcd_width; /* Need to determine this properly */
- shared->dispH = g_lcd_height; /* Need to determine this properly */
- }
-
- LOGI("Opened video1/fd=%d/obj=%08lx/shm=%d/size=%d", fd,
- (unsigned long)overlay, shared_fd, shared->size);
-
- return overlay;
-
-error1:
- close(fd);
-error:
- destroy_shared_data(shared_fd, shared, true);
- return NULL;
-}
-
-static void overlay_destroyOverlay(struct overlay_control_device_t *dev,
- overlay_t* overlay)
-{
- LOGD("overlay_destroyOverlay:IN dev (%p) and overlay (%p)", dev, overlay);
- LOG_FUNCTION_NAME;
-
- overlay_control_context_t *ctx = (overlay_control_context_t *)dev;
- overlay_object *obj = static_cast<overlay_object *>(overlay);
-
- int rc;
- int fd = obj->ctl_fd();
- uint32_t num = 0;
-
- overlay_shared_t *shared = obj->getShared();
-
- if (shared == NULL) {
- LOGE("Overlay was already destroyed - nothing needs to be done\n");
- return;
- }
-
- pthread_mutex_lock(&shared->lock);
-
- disable_streaming_locked(shared, fd);
-
- pthread_mutex_unlock(&shared->lock);
-
- destroy_shared_data(obj->shared_fd(), shared, true);
- obj->setShared(NULL);
-
- if (v4l2_overlay_req_buf(fd, &num, 0, 0)) {
- LOGE("Failed requesting buffers\n");
- }
-
- LOGI("Destroying overlay/fd=%d/obj=%08lx", fd, (unsigned long)overlay);
-
- if (close(fd)) {
- LOGE( "Error closing overly fd/%d\n", errno);
- }
-
- if (overlay) {
- if (ctx->overlay_video1 == overlay)
- ctx->overlay_video1 = NULL;
- delete overlay;
- overlay = NULL;
- }
- LOGD("overlay_destroyOverlay:OUT");
-}
-
-static int overlay_setPosition(struct overlay_control_device_t *dev,
- overlay_t* overlay, int x, int y, uint32_t w,
- uint32_t h)
-{
- LOG_FUNCTION_NAME;
-
- overlay_object *obj = static_cast<overlay_object *>(overlay);
-
- overlay_ctrl_t *stage = obj->staging();
- overlay_shared_t *shared = obj->getShared();
-
- int rc = 0;
- int temp_x = x, temp_y = y, temp_w = w, temp_h = h;
-
- /*
- * This logic here is to return an error if the rectangle is not fully
- * within the display, unless we have not received a valid position yet,
- * in which case we will do our best to adjust the rectangle to be within
- * the display.
- */
-
- /* Require a minimum size */
- if (temp_w < 16)
- temp_w = 16;
- if (temp_h < 8)
- temp_h = 8;
-
- if (!shared->controlReady) {
- if ( temp_x < 0 ) temp_x = 0;
- if ( temp_y < 0 ) temp_y = 0;
- if ( temp_w > shared->dispW ) temp_w = shared->dispW;
- if ( temp_h > shared->dispH ) temp_h = shared->dispH;
- if ( (temp_x + temp_w) > shared->dispW ) temp_w = shared->dispW - temp_x;
- if ( (temp_y + temp_h) > shared->dispH ) temp_h = shared->dispH - temp_y;
- } else if (temp_x < 0 || temp_y < 0 || (temp_x + temp_w) > shared->dispW ||
- (temp_y + temp_h) > shared->dispH) {
- /* Return an error */
- rc = -1;
- }
-
- if (rc == 0) {
- stage->posX = temp_x;
- stage->posY = temp_y;
- stage->posW = temp_w;
- stage->posH = temp_h;
-
- stage->posX_org = x;
- stage->posY_org = y;
- stage->posW_org = w;
- stage->posH_org = h;
- }
-
- return rc;
-}
-
-static int overlay_getPosition(struct overlay_control_device_t *dev,
- overlay_t* overlay, int* x, int* y, uint32_t* w,
- uint32_t* h)
-{
- LOG_FUNCTION_NAME;
-
- overlay_object *obj = static_cast<overlay_object *>(overlay);
- overlay_ctrl_t *stage = obj->staging();
-
- *x = stage->posX_org;
- *y = stage->posY_org;
- *w = stage->posW_org;
- *h = stage->posH_org;
-
- return 0;
-}
-
-static int overlay_setParameter(struct overlay_control_device_t *dev,
- overlay_t* overlay, int param, int value)
-{
- LOG_FUNCTION_NAME;
-
- overlay_ctrl_t *stage = static_cast<overlay_object *>(overlay)->staging();
- int rc = 0;
-
- switch (param) {
- case OVERLAY_DITHER:
- break;
-
- case OVERLAY_TRANSFORM:
- switch ( value )
- {
- case 0:
- stage->rotation = 0;
- stage->flip = 0;
- break;
- case OVERLAY_TRANSFORM_ROT_90:
- stage->rotation = 90;
- stage->flip = 0;
- break;
- case OVERLAY_TRANSFORM_ROT_180:
- stage->rotation = 180;
- stage->flip = 0;
- break;
- case OVERLAY_TRANSFORM_ROT_270:
- stage->rotation = 270;
- stage->flip = 0;
- break;
- // FIMC VFLIP = android overlay FLIP_H.
- case OVERLAY_TRANSFORM_FLIP_H:
- stage->rotation = 0;
- stage->flip = V4L2_CID_VFLIP;
- break;
- case OVERLAY_TRANSFORM_FLIP_V:
- stage->rotation = 0;
- stage->flip = V4L2_CID_HFLIP;
- break;
- // FIMC rotates first but android flips first.
- case OVERLAY_TRANSFORM_ROT_90+OVERLAY_TRANSFORM_FLIP_H:
- stage->rotation = 90;
- stage->flip = V4L2_CID_HFLIP;
- break;
- case OVERLAY_TRANSFORM_ROT_90+OVERLAY_TRANSFORM_FLIP_V:
- stage->rotation = 90;
- stage->flip = V4L2_CID_VFLIP;
- break;
-
- default:
- rc = -EINVAL;
- break;
- }
- break;
- }
-
- return rc;
-}
-
-static int overlay_stage(struct overlay_control_device_t *dev,
- overlay_t* overlay) {
- return 0;
-}
-
-static int overlay_commit(struct overlay_control_device_t *dev,
- overlay_t* overlay) {
- LOG_FUNCTION_NAME;
-
- overlay_object *obj = static_cast<overlay_object *>(overlay);
-
- overlay_ctrl_t *data = obj->data();
- overlay_ctrl_t *stage = obj->staging();
- overlay_shared_t *shared = obj->getShared();
-
- int ret = 0;
- int fd = obj->ctl_fd();
-
- if (shared == NULL) {
- LOGI("Shared Data Not Init'd!\n");
- return -1;
- }
-
- pthread_mutex_lock(&shared->lock);
-
- if (!shared->controlReady) {
- shared->controlReady = 1;
- }
-
- g_s5p_fimc.params.dst.full_width = g_lcd_width;
- g_s5p_fimc.params.dst.full_height = g_lcd_height;
- g_s5p_fimc.params.dst.width = stage->posW;
- g_s5p_fimc.params.dst.height = stage->posH;
- if (g_lcd_bpp == 32)
- g_s5p_fimc.params.dst.color_space = V4L2_PIX_FMT_RGB32;
- else
- g_s5p_fimc.params.dst.color_space = V4L2_PIX_FMT_RGB565;
- ret = check_fimc_dst_constraints(&g_s5p_fimc, stage->rotation);
- if (ret != 0) {
- if (ret < 0) {
- LOGE("Unsupported destination image size");
- goto end;
- } else {
- LOGD("dst width, height have changed [w= %d, h= %d] -> [w=%d, h= %d]",
- stage->posW, stage->posH, g_s5p_fimc.params.dst.width,
- g_s5p_fimc.params.dst.height);
- stage->posW = g_s5p_fimc.params.dst.width;
- stage->posH = g_s5p_fimc.params.dst.height;
- }
- }
-
- if (data->posX == stage->posX && data->posY == stage->posY &&
- data->posW == stage->posW && data->posH == stage->posH &&
- data->rotation == stage->rotation &&
- data->flip == stage->flip) {
- LOGI("Nothing to do!\n");
- goto end;
- }
-
- LOGD("Position/X%d/Y%d/W%d/H%d\n", data->posX, data->posY, data->posW,
- data->posH);
- LOGD("Adjusted Position/X%d/Y%d/W%d/H%d\n", stage->posX, stage->posY,
- stage->posW, stage->posH);
- LOGD("Rotation/%d\n", stage->rotation );
-
- if ((ret = disable_streaming_locked(shared, fd)))
- goto end;
-
- if (stage->flip != data->flip) {
- ret = v4l2_overlay_set_flip(fd, stage->flip);
- if (ret) {
- LOGE("Set Flip Failed!/%d\n", ret);
- goto end;
- }
- }
-
- if (stage->rotation != data->rotation) {
- ret = v4l2_overlay_set_rotation(fd, stage->rotation, 0);
- if (ret) {
- LOGE("Set Rotation Failed!/%d\n", ret);
- goto end;
- }
- v4l2_overlay_s_fbuf(fd, stage->rotation);
- }
-
- ret = v4l2_overlay_set_position(fd, stage->posX, stage->posY,
- stage->posW, stage->posH, stage->rotation);
- if (ret) {
- LOGE("Set Position Failed!/%d\n", ret);
- goto end;
- }
-
- data->posX = stage->posX;
- data->posY = stage->posY;
- data->posW = stage->posW;
- data->posH = stage->posH;
- data->rotation = stage->rotation;
- data->flip = stage->flip;
-
- ret = enable_streaming_locked(shared, fd);
-
-end:
- pthread_mutex_unlock(&shared->lock);
-
- return ret;
-}
-
-static int overlay_control_close(struct hw_device_t *dev)
-{
- LOG_FUNCTION_NAME;
-
- struct overlay_control_context_t* ctx =
- (struct overlay_control_context_t*)dev;
- overlay_object *overlay_v1;
-
- if (ctx) {
- overlay_v1 = static_cast<overlay_object *>(ctx->overlay_video1);
-
- overlay_destroyOverlay((struct overlay_control_device_t *)ctx,
- overlay_v1);
-
- free(ctx);
- }
- return 0;
-}
-
-static int get_pixel_format_type(unsigned int pixelformat)
-{
- switch(pixelformat) {
- case V4L2_PIX_FMT_RGB32:
- case V4L2_PIX_FMT_RGB565:
- return PFT_RGB;
-
- case V4L2_PIX_FMT_NV12:
- case V4L2_PIX_FMT_NV12T:
- case V4L2_PIX_FMT_NV21:
- case V4L2_PIX_FMT_YUV420:
- return PFT_YUV420;
-
- case V4L2_PIX_FMT_YUYV:
- case V4L2_PIX_FMT_UYVY:
- case V4L2_PIX_FMT_YVYU:
- case V4L2_PIX_FMT_VYUY:
- case V4L2_PIX_FMT_NV16:
- case V4L2_PIX_FMT_NV61:
- case V4L2_PIX_FMT_YUV422P:
- return PFT_YUV422;
-
- default:
- return PFT_YUV444;
- }
-}
-
-/* check the constraints of destination image size */
-static int check_fimc_dst_constraints(s5p_fimc_t *s5p_fimc,
- unsigned int rotation)
-{
- int tmp = 0;
-
- if((s5p_fimc->params.dst.height > 0) && (s5p_fimc->params.dst.height < 16))
- s5p_fimc->params.dst.height = 16;
-
- if(s5p_fimc->params.dst.width%8 != 0) {
- tmp = s5p_fimc->params.dst.width - (s5p_fimc->params.dst.width%8);
- if(tmp <= 0)
- return -1;
- else
- s5p_fimc->params.dst.width = tmp;
- }
-
- return 1;
-}
-/* check the constraints of source image size */
-static int check_fimc_src_constraints(s5p_fimc_t *s5p_fimc)
-{
- int format_type = 0;
-
- if(s5p_fimc->params.src.full_width < 16 ||
- s5p_fimc->params.src.full_height < 8 )
- return -1;
-
- if(s5p_fimc->hw_ver == 0x50) {
- format_type = get_pixel_format_type(s5p_fimc->params.src.color_space);
- switch (format_type) {
- case PFT_YUV420:
- if (s5p_fimc->params.src.height%2 != 0)
- s5p_fimc->params.src.height = s5p_fimc->params.src.height
- - (s5p_fimc->params.src.height)%2;
-
- if (s5p_fimc->params.src.width%2 != 0)
- s5p_fimc->params.src.width = s5p_fimc->params.src.width
- - (s5p_fimc->params.src.width)%2;
- break;
-
- case PFT_YUV422:
- if (s5p_fimc->params.src.width%2 != 0)
- s5p_fimc->params.src.width = s5p_fimc->params.src.width
- - (s5p_fimc->params.src.width)%2;
- }
- } else {
- if (s5p_fimc->params.src.height < 8) {
- s5p_fimc->params.src.height = 8;
- }
-
- if (s5p_fimc->params.src.width%16 != 0) {
- s5p_fimc->params.src.width = s5p_fimc->params.src.width
- - (s5p_fimc->params.src.width)%16;
- }
- }
-
- return 1;
-}
-
-/****************************************************************************
- * Data module
- *****************************************************************************/
-
-int overlay_initialize(struct overlay_data_device_t *dev,
- overlay_handle_t handle)
-{
- LOG_FUNCTION_NAME;
-
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
- struct stat stat;
-
- int i;
- int rc = -1;
-
- ctx->num_buffers = handle_num_buffers(handle);
- ctx->width = handle_width(handle);
- ctx->height = handle_height(handle);
- ctx->format = handle_format(handle);
- ctx->ctl_fd = handle_ctl_fd(handle);
- ctx->shared_fd = handle_shared_fd(handle);
- ctx->shared_size = handle_shared_size(handle);
- ctx->shared = NULL;
- ctx->qd_buf_count = 0;
- ctx->cacheable_buffers = 0;
-
- if (ctx->format >= HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP
- && ctx->format < HAL_PIXEL_FORMAT_CUSTOM_MAX)
- ctx->zerocopy = true;
- else
- ctx->zerocopy = false;
-
- if (fstat(ctx->ctl_fd, &stat)) {
- LOGE("Error = %s from %s\n", strerror(errno), "overlay initialize");
- return -1;
- }
-
- if (open_shared_data(ctx)) {
- return -1;
- }
-
- ctx->shared->dataReady = 0;
-
- ctx->mapping_data = new struct mapping_data;
- ctx->buffers = new void* [ctx->num_buffers];
- ctx->buffers_len = new size_t[ctx->num_buffers];
-
- if (!ctx->buffers || !ctx->buffers_len || !ctx->mapping_data) {
- LOGE("Failed alloc'ing buffer arrays\n");
- goto error;
- } else {
-
- /*
- * in the zero copy case,
- * don't need to mmap buffer for source
- */
- if (ctx->zerocopy)
- rc = 0;
- else {
- for (i = 0; i < ctx->num_buffers; i++) {
- rc = v4l2_overlay_map_buf(ctx->ctl_fd, i, &ctx->buffers[i],
- &ctx->buffers_len[i]);
- if (rc) {
- LOGE("Failed mapping buffers\n");
- goto error;
- }
- }
- }
- }
-
- v4l2_overlay_init_fimc(ctx->ctl_fd, &g_s5p_fimc);
-
- return ( rc );
-
-error:
-
- if(ctx->mapping_data)
- delete (ctx->mapping_data);
- if(ctx->buffers)
- delete [] ctx->buffers;
- if(ctx->buffers_len)
- delete [] ctx->buffers_len;
-
- close_shared_data( ctx );
-
- return -1;
-}
-
-static int overlay_resizeInput(struct overlay_data_device_t *dev, uint32_t w,
- uint32_t h)
-{
- int rc = -1;
- int ret = 0;
-
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- if ((ctx->width == (int)w) && (ctx->width == (int)h)) {
- LOGV("same as current width and height. so do nothing");
- return 0;
- }
-
- if (!ctx->shared) {
- LOGI("Shared Data Not Init'd!\n");
- return -1;
- }
-
- if (ctx->shared->dataReady) {
- LOGV("Either setCrop() or queueBuffer() was called prior to this!"
- "Therefore failing this call.\n");
- return -1;
- }
-
- pthread_mutex_lock(&ctx->shared->lock);
-
- if ((rc = disable_streaming_locked(ctx->shared, ctx->ctl_fd)))
- goto end;
-
- if (!ctx->zerocopy) {
- for (int i = 0; i < ctx->num_buffers; i++) {
- v4l2_overlay_unmap_buf(ctx->buffers[i], ctx->buffers_len[i]);
- }
- }
-
- g_s5p_fimc.params.src.full_width = w;
- g_s5p_fimc.params.src.full_height = h;
- g_s5p_fimc.params.src.width = w;
- g_s5p_fimc.params.src.height = h;
- set_color_space(ctx->format, &g_s5p_fimc.params.src.color_space);
- ret = check_fimc_src_constraints(&g_s5p_fimc);
-
- if(ret != 0) {
- if(ret < 0) {
- LOGE("Not supported source image size");
- goto end;
- } else {
- LOGD("src width, height are changed [w= %d, h= %d] -> [w=%d, h= %d]"
- , w, h, g_s5p_fimc.params.src.width
- , g_s5p_fimc.params.src.height);
- w = g_s5p_fimc.params.src.width;
- h = g_s5p_fimc.params.src.height;
- }
- }
-
- rc = v4l2_overlay_init(ctx->ctl_fd, w, h, ctx->format, phyAddr);
- if (rc) {
- LOGE("Error initializing overlay");
- goto end;
- }
- rc = v4l2_overlay_set_crop(ctx->ctl_fd, 0, 0, w, h);
- if (rc) {
- LOGE("Error setting crop window\n");
- goto end;
- }
- rc = v4l2_overlay_req_buf(ctx->ctl_fd, (uint32_t *)(&ctx->num_buffers),
- ctx->cacheable_buffers, (int)ctx->zerocopy);
- if (rc) {
- LOGE("Error creating buffers");
- goto end;
- }
-
- if (!ctx->zerocopy) {
- for (int i = 0; i < ctx->num_buffers; i++)
- v4l2_overlay_map_buf(ctx->ctl_fd, i, &ctx->buffers[i],
- &ctx->buffers_len[i]);
- }
-
- rc = enable_streaming_locked(ctx->shared, ctx->ctl_fd);
-
-end:
- pthread_mutex_unlock(&ctx->shared->lock);
-
- return rc;
-}
-
-
-static int overlay_data_setParameter(struct overlay_data_device_t *dev,
- int param, int value)
-{
- int ret = 0;
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- if (ctx->shared == NULL) {
- LOGI("Shared Data Not Init'd!\n");
- return -1;
- }
-
- if (ctx->shared->dataReady) {
- LOGI("Too late. Cant set it now!\n");
- return -1;
- }
-
- if (param == CACHEABLE_BUFFERS)
- ctx->cacheable_buffers = value;
-
- return ( ret );
-}
-
-
-static int overlay_setCrop(struct overlay_data_device_t *dev, uint32_t x,
- uint32_t y, uint32_t w, uint32_t h) {
- LOG_FUNCTION_NAME;
-
- int rc = 0;
- int cnt = 0;
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- if (ctx->shared == NULL) {
- LOGI("Shared Data Not Init'd!\n");
- return -1;
- }
-
- pthread_mutex_lock(&ctx->shared->lock);
-
- ctx->shared->dataReady = 1;
-
- if (ctx->data.cropX == x && ctx->data.cropY == y && ctx->data.cropW == w
- && ctx->data.cropH == h) {
- goto end;
- }
-
- ctx->data.cropX = x;
- ctx->data.cropY = y;
- ctx->data.cropW = w;
- ctx->data.cropH = h;
-
- LOGD("Crop Win/X%d/Y%d/W%d/H%d\n", x, y, w, h );
-
- if ((rc = disable_streaming_locked(ctx->shared, ctx->ctl_fd)))
- goto end;
-
- rc = v4l2_overlay_set_crop(ctx->ctl_fd, x, y, w, h);
- if (rc) {
- LOGE("Set Crop Window Failed!/%d\n", rc);
- }
-
- rc = enable_streaming_locked(ctx->shared, ctx->ctl_fd);
-
-end:
- pthread_mutex_unlock(&ctx->shared->lock);
- return rc;
-}
-
-static int overlay_getCrop(struct overlay_data_device_t *dev , uint32_t* x,
- uint32_t* y, uint32_t* w, uint32_t* h) {
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- return v4l2_overlay_get_crop(ctx->ctl_fd, x, y, w, h);
-}
-
-int overlay_dequeueBuffer(struct overlay_data_device_t *dev,
- overlay_buffer_t *buffer) {
- /* blocks until a buffer is available and return an opaque structure
- * representing this buffer.
- */
-
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- int rc=0;
- int i = -1;
- uint32_t num = 0;
- int cnt = 0;
-
- pthread_mutex_lock(&ctx->shared->lock);
- if ( ctx->shared->streamingReset ) {
- ctx->shared->streamingReset = 0;
- pthread_mutex_unlock(&ctx->shared->lock);
- return ALL_BUFFERS_FLUSHED;
- }
- pthread_mutex_unlock(&ctx->shared->lock);
-
- /* If we are not streaming dequeue will fail,
- skip to prevent error printouts */
- if (ctx->shared->streamEn && ctx->qd_buf_count) {
- if ((rc = v4l2_overlay_dq_buf( ctx->ctl_fd, &i ,ctx->zerocopy)) != 0) {
- LOGE("Failed to DQ/%d\n", rc);
- }
- else if (i < 0 || i > ctx->num_buffers) {
- rc = -EINVAL;
- } else {
- *((int *)buffer) = i;
- ctx->qd_buf_count --;
- }
- } else {
- rc = -1;
- }
-
- return rc;
-}
-
-int overlay_queueBuffer(struct overlay_data_device_t *dev,
- overlay_buffer_t buffer) {
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- int cnt = 0;
-
- pthread_mutex_lock(&ctx->shared->lock);
- if ( ctx->shared->streamingReset ) {
- ctx->shared->streamingReset = 0;
- pthread_mutex_unlock(&ctx->shared->lock);
- return ALL_BUFFERS_FLUSHED;
- }
- pthread_mutex_unlock(&ctx->shared->lock);
-
- /* Catch the case where the data side had no need to set the crop window */
- if (!ctx->shared->dataReady) {
- ctx->shared->dataReady = 1;
- enable_streaming(ctx->shared, ctx->ctl_fd);
- }
-
- if (!ctx->shared->controlReady) return -1;
- int rc = v4l2_overlay_q_buf( ctx->ctl_fd, (int)buffer, (int) ctx->zerocopy );
- if (rc == 0 && ctx->qd_buf_count < ctx->num_buffers) {
- ctx->qd_buf_count ++;
- }
-
- return rc;
-}
-
-void *overlay_getBufferAddress(struct overlay_data_device_t *dev,
- overlay_buffer_t buffer)
-{
- LOG_FUNCTION_NAME;
-
- /* this may fail (NULL) if this feature is not supported. In that case,
- * presumably, there is some other HAL module that can fill the buffer,
- * using a DSP for instance
- */
- int ret;
- struct v4l2_buffer buf;
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- if (ctx->zerocopy)
- return NULL;
-
- if ((int)buffer >= 0 && (int)buffer < ctx->num_buffers)
- return (void*) ctx->buffers[(int)buffer];
- else
- return NULL;
-}
-
-int overlay_getBufferCount(struct overlay_data_device_t *dev)
-{
- LOG_FUNCTION_NAME;
-
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
-
- return (ctx->num_buffers);
-}
-
-static int overlay_data_close(struct hw_device_t *dev) {
-
- LOG_FUNCTION_NAME;
-
- struct overlay_data_context_t* ctx = (struct overlay_data_context_t*)dev;
- int rc;
-
- if (ctx) {
- overlay_data_device_t *overlay_dev = &ctx->device;
- int buf;
- int i;
-
- pthread_mutex_lock(&ctx->shared->lock);
-
- if (!ctx->zerocopy)
- for (i = 0; i < ctx->num_buffers; i++) {
- LOGV("Unmap Buffer/%d/%08lx/%d", i, (unsigned long)ctx->buffers[i],
- ctx->buffers_len[i] );
- rc = v4l2_overlay_unmap_buf(ctx->buffers[i], ctx->buffers_len[i]);
- if (rc != 0) {
- LOGE("Error unmapping the buffer/%d/%d", i, rc);
- }
- }
-
- delete (ctx->mapping_data);
- delete [] ctx->buffers;
- delete [] ctx->buffers_len;
-
- pthread_mutex_unlock(&ctx->shared->lock);
-
- ctx->shared->dataReady = 0;
- close_shared_data( ctx );
-
- free(ctx);
- }
-
- return 0;
-}
-
-/*****************************************************************************/
-
-static int overlay_device_open(const struct hw_module_t* module,
- const char* name, struct hw_device_t** device)
-{
- LOG_FUNCTION_NAME;
- int status = -EINVAL;
-
- if (!strcmp(name, OVERLAY_HARDWARE_CONTROL)) {
- struct overlay_control_context_t *dev;
- dev = (overlay_control_context_t*)malloc(sizeof(*dev));
-
- /* initialize our state here */
- memset(dev, 0, sizeof(*dev));
-
- /* initialize the procs */
- dev->device.common.tag = HARDWARE_DEVICE_TAG;
- dev->device.common.version = 0;
- dev->device.common.module = const_cast<hw_module_t*>(module);
- dev->device.common.close = overlay_control_close;
-
- dev->device.get = overlay_get;
- dev->device.createOverlay = overlay_createOverlay;
- dev->device.destroyOverlay = overlay_destroyOverlay;
- dev->device.setPosition = overlay_setPosition;
- dev->device.getPosition = overlay_getPosition;
- dev->device.setParameter = overlay_setParameter;
- dev->device.stage = overlay_stage;
- dev->device.commit = overlay_commit;
-
- *device = &dev->device.common;
- status = 0;
- } else if (!strcmp(name, OVERLAY_HARDWARE_DATA)) {
- struct overlay_data_context_t *dev;
- dev = (overlay_data_context_t*)malloc(sizeof(*dev));
-
- /* initialize our state here */
- memset(dev, 0, sizeof(*dev));
-
- /* initialize the procs */
- dev->device.common.tag = HARDWARE_DEVICE_TAG;
- dev->device.common.version = 0;
- dev->device.common.module = const_cast<hw_module_t*>(module);
- dev->device.common.close = overlay_data_close;
-
- dev->device.initialize = overlay_initialize;
- dev->device.resizeInput = overlay_resizeInput;
- dev->device.setCrop = overlay_setCrop;
- dev->device.getCrop = overlay_getCrop;
- dev->device.setParameter = overlay_data_setParameter;
- dev->device.dequeueBuffer = overlay_dequeueBuffer;
- dev->device.queueBuffer = overlay_queueBuffer;
- dev->device.getBufferAddress = overlay_getBufferAddress;
- dev->device.getBufferCount = overlay_getBufferCount;
-
- *device = &dev->device.common;
- status = 0;
- }
- return status;
-}
diff --git a/liboverlay/v4l2_utils.c b/liboverlay/v4l2_utils.c
deleted file mode 100644
index f3ebbc2..0000000
--- a/liboverlay/v4l2_utils.c
+++ /dev/null
@@ -1,788 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* #define OVERLAY_DEBUG 1 */
-#define LOG_TAG "v4l2_utils"
-
-#include <fcntl.h>
-#include <errno.h>
-#include <cutils/log.h>
-#include <hardware/overlay.h>
-#include <linux/videodev.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-#include "v4l2_utils.h"
-
-#ifndef V4L2_DEVICE
-#define V4L2_DEVICE "/dev/video1"
-#endif
-
-
-
-#define LOG_FUNCTION_NAME LOGV("%s: %s", __FILE__, __func__);
-
-#define V4L2_CID_PRIV_OFFSET 0x0
-#define V4L2_CID_PRIV_ROTATION (V4L2_CID_PRIVATE_BASE \
- + V4L2_CID_PRIV_OFFSET + 0)
-#define V4L2_CID_PRIV_COLORKEY (V4L2_CID_PRIVATE_BASE \
- + V4L2_CID_PRIV_OFFSET + 1)
-#define V4L2_CID_PRIV_COLORKEY_EN (V4L2_CID_PRIVATE_BASE \
- + V4L2_CID_PRIV_OFFSET + 2)
-
-extern unsigned int g_lcd_width;
-extern unsigned int g_lcd_height;
-extern unsigned int g_lcd_bpp;
-
-int v4l2_overlay_get(int name)
-{
- int result = -1;
- switch (name) {
- case OVERLAY_MINIFICATION_LIMIT:
- result = 4; /* 0 = no limit */
- break;
- case OVERLAY_MAGNIFICATION_LIMIT:
- result = 2; /* 0 = no limit */
- break;
- case OVERLAY_SCALING_FRAC_BITS:
- result = 0; /* 0 = infinite */
- break;
- case OVERLAY_ROTATION_STEP_DEG:
- result = 90; /* 90 rotation steps (for instance) */
- break;
- case OVERLAY_HORIZONTAL_ALIGNMENT:
- result = 1; /* 1-pixel alignment */
- break;
- case OVERLAY_VERTICAL_ALIGNMENT:
- result = 1; /* 1-pixel alignment */
- break;
- case OVERLAY_WIDTH_ALIGNMENT:
- result = 1; /* 1-pixel alignment */
- break;
- case OVERLAY_HEIGHT_ALIGNMENT:
- result = 1; /* 1-pixel alignment */
- break;
- }
- return result;
-}
-
-int v4l2_overlay_open(int id)
-{
- LOG_FUNCTION_NAME
- return open(V4L2_DEVICE, O_RDWR);
-}
-
-int v4l2_overlay_init_fimc(int fd, s5p_fimc_t *s5p_fimc)
-{
- int ret;
- struct v4l2_control vc;
-
- if (fd < 0)
- return -1;
-
- vc.id = V4L2_CID_FIMC_VERSION;
- vc.value = 0;
-
- s5p_fimc->dev_fd = fd;
-
- ret = ioctl(s5p_fimc->dev_fd, VIDIOC_G_CTRL, &vc);
- if (ret < 0) {
- LOGE("Error in video VIDIOC_G_CTRL - V4L2_CID_FIMC_VERSION (%d)", ret);
- LOGE("FIMC version is set with default");
- vc.value = 0x43;
- }
- s5p_fimc->hw_ver = vc.value;
- return 0;
-}
-
-void dump_pixfmt(struct v4l2_pix_format *pix)
-{
- LOGV("w: %d\n", pix->width);
- LOGV("h: %d\n", pix->height);
- LOGV("color: %x\n", pix->colorspace);
-
- switch (pix->pixelformat) {
- case V4L2_PIX_FMT_YUYV:
- LOGV("YUYV\n");
- break;
- case V4L2_PIX_FMT_UYVY:
- LOGV("UYVY\n");
- break;
- case V4L2_PIX_FMT_RGB565:
- LOGV("RGB565\n");
- break;
- case V4L2_PIX_FMT_RGB565X:
- LOGV("RGB565X\n");
- break;
- default:
- LOGV("not supported\n");
- }
-}
-
-void dump_crop(struct v4l2_crop *crop)
-{
- LOGV("crop l: %d ", crop->c.left);
- LOGV("crop t: %d ", crop->c.top);
- LOGV("crop w: %d ", crop->c.width);
- LOGV("crop h: %d\n", crop->c.height);
-}
-
-void dump_window(struct v4l2_window *win)
-{
- LOGV("window l: %d ", win->w.left);
- LOGV("window t: %d ", win->w.top);
- LOGV("window w: %d ", win->w.width);
- LOGV("window h: %d\n", win->w.height);
-}
-
-void v4l2_overlay_dump_state(int fd)
-{
- struct v4l2_format format;
- struct v4l2_crop crop;
- int ret;
-
- LOGV("dumping driver state:");
- format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- ret = ioctl(fd, VIDIOC_G_FMT, &format);
- if (ret < 0)
- return;
- LOGV("output pixfmt:\n");
- dump_pixfmt(&format.fmt.pix);
-
- format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
- ret = ioctl(fd, VIDIOC_G_FMT, &format);
- if (ret < 0)
- return;
- LOGV("v4l2_overlay window:\n");
- dump_window(&format.fmt.win);
-
- crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- ret = ioctl(fd, VIDIOC_G_CROP, &crop);
- if (ret < 0)
- return;
- LOGV("output crop:\n");
- dump_crop(&crop);
-}
-
-static void error(int fd, const char *msg)
-{
- LOGE("Error = %s from %s", strerror(errno), msg);
-#ifdef OVERLAY_DEBUG
- v4l2_overlay_dump_state(fd);
-#endif
-}
-
-static int v4l2_overlay_ioctl(int fd, int req, void *arg, const char* msg)
-{
- int ret;
- ret = ioctl(fd, req, arg);
- if (ret < 0) {
- error(fd, msg);
- return -1;
- }
- return 0;
-}
-
-#define v4l2_fourcc(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \
- ((__u32)(c) << 16) | ((__u32)(d) << 24))
-/* 12 Y/CbCr 4:2:0 64x32 macroblocks */
-#define V4L2_PIX_FMT_NV12T v4l2_fourcc('T', 'V', '1', '2')
-
-int configure_pixfmt(struct v4l2_pix_format *pix, int32_t fmt,
- uint32_t w, uint32_t h)
-{
- LOG_FUNCTION_NAME
- int fd;
-
- switch (fmt) {
- case OVERLAY_FORMAT_RGBA_8888:
- return -1;
- case OVERLAY_FORMAT_RGB_565:
- pix->pixelformat = V4L2_PIX_FMT_RGB565;
- break;
- case OVERLAY_FORMAT_BGRA_8888:
- return -1;
- case OVERLAY_FORMAT_YCbYCr_422_I:
- case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
- pix->pixelformat = V4L2_PIX_FMT_YUYV;
- break;
- case OVERLAY_FORMAT_CbYCrY_422_I:
- case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
- pix->pixelformat = V4L2_PIX_FMT_UYVY;
- break;
- case HAL_PIXEL_FORMAT_YCbCr_420_P:
- pix->pixelformat = V4L2_PIX_FMT_YUV420;
- break;
- case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
- pix->pixelformat = V4L2_PIX_FMT_NV12T;
- break;
- case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
- pix->pixelformat = V4L2_PIX_FMT_NV21;
- break;
- default:
- return -1;
- }
- pix->width = w;
- pix->height = h;
- return 0;
-}
-
-static void configure_window(struct v4l2_window *win, int32_t w,
- int32_t h, int32_t x, int32_t y)
-{
- LOG_FUNCTION_NAME
-
- win->w.left = x;
- win->w.top = y;
- win->w.width = w;
- win->w.height = h;
-}
-
-void get_window(struct v4l2_format *format, int32_t *x,
- int32_t *y, int32_t *w, int32_t *h)
-{
- LOG_FUNCTION_NAME
-
- *x = format->fmt.win.w.left;
- *y = format->fmt.win.w.top;
- *w = format->fmt.win.w.width;
- *h = format->fmt.win.w.height;
-}
-
-int v4l2_overlay_init(int fd, uint32_t w, uint32_t h, uint32_t fmt,
- uint32_t addr)
-{
- LOG_FUNCTION_NAME
-
- struct v4l2_format format;
- struct v4l2_framebuffer fbuf;
- int ret;
-
- format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FMT, &format, "get format");
- if (ret)
- return ret;
- LOGV("v4l2_overlay_init:: w=%d h=%d\n", format.fmt.pix.width,
- format.fmt.pix.height);
-
- format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- configure_pixfmt(&format.fmt.pix, fmt, w, h);
- LOGV("v4l2_overlay_init:: w=%d h=%d\n", format.fmt.pix.width,
- format.fmt.pix.height);
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FMT, &format, "set output format");
- if (ret)
- return ret;
-
- ret = v4l2_overlay_s_fbuf(fd, 0);
- if (ret)
- return ret;
-
- return ret;
-}
-
-int v4l2_overlay_s_fbuf(int fd, int rotation)
-{
- struct v4l2_framebuffer fbuf;
- int ret;
-
- /* configure the v4l2_overlay framebuffer */
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FBUF, &fbuf, "get fbuf");
- if (ret)
- return ret;
-
- /* if fbuf.base value is set by 0, using local DMA. */
- fbuf.base = (void *)0;
- if (rotation == 0 || rotation == 180) {
- fbuf.fmt.width = g_lcd_width;
- fbuf.fmt.height = g_lcd_height;
- } else {
- fbuf.fmt.width = g_lcd_height;
- fbuf.fmt.height = g_lcd_width;
- }
-
- if (g_lcd_bpp == 32)
- fbuf.fmt.pixelformat = V4L2_PIX_FMT_RGB32;
- else
- fbuf.fmt.pixelformat = V4L2_PIX_FMT_RGB565;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FBUF, &fbuf, "set fbuf");
- if (ret)
- return ret;
-
- return ret;
-}
-
-int v4l2_overlay_get_input_size_and_format(int fd, uint32_t *w, uint32_t *h
- , uint32_t *fmt)
-{
- LOG_FUNCTION_NAME
-
- struct v4l2_format format;
- int ret;
-
- format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FMT, &format, "get format");
- *w = format.fmt.pix.width;
- *h = format.fmt.pix.height;
- if (format.fmt.pix.pixelformat == V4L2_PIX_FMT_YUYV)
- *fmt = OVERLAY_FORMAT_CbYCrY_422_I;
- else
- return -EINVAL;
- return ret;
-}
-
-int v4l2_overlay_set_position(int fd, int32_t x, int32_t y
- , int32_t w, int32_t h, int rotation)
-{
- LOG_FUNCTION_NAME
-
- struct v4l2_format format;
- int ret;
- int rot_x = 0, rot_y = 0 , rot_w = 0, rot_h = 0;
-
- /* configure the src format pix */
- /* configure the dst v4l2_overlay window */
- format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FMT, &format,
- "get v4l2_overlay format");
- if (ret)
- return ret;
- LOGV("v4l2_overlay_set_position:: w=%d h=%d", format.fmt.win.w.width
- , format.fmt.win.w.height);
-
- if (rotation == 0) {
- rot_x = x;
- rot_y = y;
- rot_w = w;
- rot_h = h;
- } else if (rotation == 90) {
- rot_x = y;
- rot_y = g_lcd_width - (x + w);
- rot_w = h;
- rot_h = w;
- } else if (rotation == 180) {
- rot_x = g_lcd_width - (x + w);
- rot_y = g_lcd_height - (y + h);
- rot_w = w;
- rot_h = h;
- } else if (rotation == 270) {
- rot_x = g_lcd_height - (y + h);
- rot_y = x;
- rot_w = h;
- rot_h = w;
- }
-
- configure_window(&format.fmt.win, rot_w, rot_h, rot_x, rot_y);
-
- format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FMT, &format,
- "set v4l2_overlay format");
-
- LOGV("v4l2_overlay_set_position:: w=%d h=%d rotation=%d"
- , format.fmt.win.w.width, format.fmt.win.w.height, rotation);
-
- if (ret)
- return ret;
- v4l2_overlay_dump_state(fd);
-
- return 0;
-}
-
-int v4l2_overlay_get_position(int fd, int32_t *x, int32_t *y, int32_t *w,
- int32_t *h)
-{
- struct v4l2_format format;
- int ret;
-
- format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FMT, &format,
- "get v4l2_overlay format");
-
- if (ret)
- return ret;
-
- get_window(&format, x, y, w, h);
-
- return 0;
-}
-
-int v4l2_overlay_set_crop(int fd, uint32_t x, uint32_t y, uint32_t w,
- uint32_t h)
-{
- LOG_FUNCTION_NAME
-
- struct v4l2_crop crop;
- int ret;
-
- crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_CROP, &crop, "get crop");
- crop.c.left = x;
- crop.c.top = y;
- crop.c.width = w;
- crop.c.height = h;
- crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
- LOGV("%s:crop.c.left = %d\n", __func__, crop.c.left);
- LOGV("%s:crop.c.top = %d\n", __func__, crop.c.top);
- LOGV("%s:crop.c.width = %d\n", __func__, crop.c.width);
- LOGV("%s:crop.c.height = %d\n", __func__, crop.c.height);
- LOGV("%s:crop.type = 0x%x\n", __func__, crop.type);
-
- return v4l2_overlay_ioctl(fd, VIDIOC_S_CROP, &crop, "set crop");
-}
-
-int v4l2_overlay_get_crop(int fd, uint32_t *x, uint32_t *y, uint32_t *w,
- uint32_t *h)
-{
- LOG_FUNCTION_NAME
-
- struct v4l2_crop crop;
- int ret;
-
- crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_CROP, &crop, "get crop");
- *x = crop.c.left;
- *y = crop.c.top;
- *w = crop.c.width;
- *h = crop.c.height;
- return ret;
-}
-
-int v4l2_overlay_set_flip(int fd, int flip)
-{
- LOG_FUNCTION_NAME
-
- int ret;
- struct v4l2_control ctrl_v;
- struct v4l2_control ctrl_h;
-
- switch (flip) {
- case 0:
- ctrl_v.value = 0;
- ctrl_h.value = 0;
- break;
- case V4L2_CID_HFLIP:
- ctrl_v.value = 0;
- ctrl_h.value = 1;
- break;
- case V4L2_CID_VFLIP:
- ctrl_v.value = 1;
- ctrl_h.value = 0;
- break;
- default:
- return -1;
- }
-
- ctrl_v.id = V4L2_CID_VFLIP;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_CTRL, &ctrl_v, "set vflip");
- if (ret) return ret;
-
- ctrl_h.id = V4L2_CID_HFLIP;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_CTRL, &ctrl_h, "set hflip");
- return ret;
-}
-
-int v4l2_overlay_set_rotation(int fd, int degree, int step)
-{
- LOG_FUNCTION_NAME
-
- int ret;
- struct v4l2_control ctrl;
-
- ctrl.id = V4L2_CID_PRIV_ROTATION;
- ctrl.value = degree;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_CTRL, &ctrl, "set rotation");
-
- return ret;
-}
-
-int v4l2_overlay_set_colorkey(int fd, int enable, int colorkey)
-{
- LOG_FUNCTION_NAME
-
- int ret;
- struct v4l2_framebuffer fbuf;
- struct v4l2_format fmt;
-
- memset(&fbuf, 0, sizeof(fbuf));
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FBUF, &fbuf,
- "get transparency enables");
-
- if (ret)
- return ret;
-
- if (enable)
- fbuf.flags |= V4L2_FBUF_FLAG_CHROMAKEY;
- else
- fbuf.flags &= ~V4L2_FBUF_FLAG_CHROMAKEY;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FBUF, &fbuf, "enable colorkey");
-
- if (ret)
- return ret;
-
- if (enable) {
- memset(&fmt, 0, sizeof(fmt));
- fmt.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FMT, &fmt, "get colorkey");
-
- if (ret)
- return ret;
-
- fmt.fmt.win.chromakey = colorkey & 0xFFFFFF;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FMT, &fmt, "set colorkey");
- }
-
- return ret;
-}
-
-int v4l2_overlay_set_global_alpha(int fd, int enable, int alpha)
-{
- LOG_FUNCTION_NAME
-
- int ret;
- struct v4l2_framebuffer fbuf;
- struct v4l2_format fmt;
-
- memset(&fbuf, 0, sizeof(fbuf));
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FBUF, &fbuf,
- "get transparency enables");
-
- if (ret)
- return ret;
-
- if (enable)
- fbuf.flags |= V4L2_FBUF_FLAG_GLOBAL_ALPHA;
- else
- fbuf.flags &= ~V4L2_FBUF_FLAG_GLOBAL_ALPHA;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FBUF, &fbuf, "enable global alpha");
-
- if (ret)
- return ret;
-
- if (enable) {
- memset(&fmt, 0, sizeof(fmt));
- fmt.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
- ret = v4l2_overlay_ioctl(fd, VIDIOC_G_FMT, &fmt, "get global alpha");
-
- if (ret)
- return ret;
-
- fmt.fmt.win.global_alpha = alpha & 0xFF;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_S_FMT, &fmt, "set global alpha");
- }
-
- return ret;
-}
-
-int v4l2_overlay_set_local_alpha(int fd, int enable)
-{
- int ret;
- struct v4l2_framebuffer fbuf;
-
- ret = 0;
-
- return ret;
-}
-
-int v4l2_overlay_req_buf(int fd, uint32_t *num_bufs, int cacheable_buffers, int zerocopy)
-{
- struct v4l2_requestbuffers reqbuf;
- int ret, i;
-
- reqbuf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
- if (zerocopy)
- reqbuf.memory = V4L2_MEMORY_USERPTR;
- else
- reqbuf.memory = V4L2_MEMORY_MMAP;
- reqbuf.count = *num_bufs;
-
- ret = ioctl(fd, VIDIOC_REQBUFS, &reqbuf);
- if (ret < 0) {
- error(fd, "reqbuf ioctl");
- return ret;
- }
-
- if (reqbuf.count > *num_bufs) {
- error(fd, "Not enough buffer structs passed to get_buffers");
- return -ENOMEM;
- }
- *num_bufs = reqbuf.count;
-
- return 0;
-}
-
-static int is_mmaped(struct v4l2_buffer *buf)
-{
- return buf->flags == V4L2_BUF_FLAG_MAPPED;
-}
-
-static int is_queued(struct v4l2_buffer *buf)
-{
- /* is either on the input or output queue in the kernel */
- return (buf->flags & V4L2_BUF_FLAG_QUEUED) ||
- (buf->flags & V4L2_BUF_FLAG_DONE);
-}
-
-static int is_dequeued(struct v4l2_buffer *buf)
-{
- /* is on neither input or output queue in kernel */
- return !(buf->flags & V4L2_BUF_FLAG_QUEUED) &&
- !(buf->flags & V4L2_BUF_FLAG_DONE);
-}
-
-int v4l2_overlay_query_buffer(int fd, int index, struct v4l2_buffer *buf)
-{
- LOG_FUNCTION_NAME
-
- memset(buf, 0, sizeof(struct v4l2_buffer));
-
- buf->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- buf->memory = V4L2_MEMORY_MMAP;
- buf->index = index;
- LOGV("query buffer, mem=%u type=%u index=%u\n",
- buf->memory, buf->type, buf->index);
- return v4l2_overlay_ioctl(fd, VIDIOC_QUERYBUF, buf, "querybuf ioctl");
-}
-
-int v4l2_overlay_map_buf(int fd, int index, void **start, size_t *len)
-{
- LOG_FUNCTION_NAME
-
- struct v4l2_buffer buf;
- int ret;
-
- ret = v4l2_overlay_query_buffer(fd, index, &buf);
- if (ret)
- return ret;
-
- if (is_mmaped(&buf)) {
- LOGE("Trying to mmap buffers that are already mapped!\n");
- return -EINVAL;
- }
-
- *len = buf.length;
- *start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED,
- fd, buf.m.offset);
- if (*start == MAP_FAILED) {
- LOGE("map failed, length=%u offset=%u\n", buf.length, buf.m.offset);
- return -EINVAL;
- }
- return 0;
-}
-
-int v4l2_overlay_unmap_buf(void *start, size_t len)
-{
- LOG_FUNCTION_NAME
- return munmap(start, len);
-}
-
-
-int v4l2_overlay_get_caps(int fd, struct v4l2_capability *caps)
-{
- return v4l2_overlay_ioctl(fd, VIDIOC_QUERYCAP, caps, "query cap");
-}
-
-int v4l2_overlay_stream_on(int fd)
-{
- int ret;
- uint32_t type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
- ret = v4l2_overlay_set_local_alpha(fd, 1);
- if (ret)
- return ret;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_STREAMON, &type, "stream on");
-
- return ret;
-}
-
-int v4l2_overlay_stream_off(int fd)
-{
- int ret;
- uint32_t type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
- ret = v4l2_overlay_set_local_alpha(fd, 0);
- if (ret)
- return ret;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_STREAMOFF, &type, "stream off");
-
- return ret;
-}
-
-int v4l2_overlay_q_buf(int fd, int buffer, int zerocopy)
-{
- struct v4l2_buffer buf;
- int ret;
-
- if (zerocopy) {
- uint8_t *pPhyYAddr;
- uint8_t *pPhyCAddr;
- struct fimc_buf fimc_src_buf;
- uint8_t index;
-
- memcpy(&pPhyYAddr, (void *) buffer, sizeof(pPhyYAddr));
- memcpy(&pPhyCAddr, (void *) (buffer + sizeof(pPhyYAddr)),
- sizeof(pPhyCAddr));
- memcpy(&index,
- (void *) (buffer + sizeof(pPhyYAddr) + sizeof(pPhyCAddr)),
- sizeof(index));
-
- fimc_src_buf.base[0] = (dma_addr_t) pPhyYAddr;
- fimc_src_buf.base[1] = (dma_addr_t) pPhyCAddr;
- fimc_src_buf.base[2] =
- (dma_addr_t) (pPhyCAddr + (pPhyCAddr - pPhyYAddr)/4);
-
- buf.index = index;
- buf.memory = V4L2_MEMORY_USERPTR;
- buf.m.userptr = (unsigned long)&fimc_src_buf;
- buf.length = 0;
- } else {
- buf.index = buffer;
- buf.memory = V4L2_MEMORY_MMAP;
- }
-
- buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
- buf.field = V4L2_FIELD_NONE;
- buf.timestamp.tv_sec = 0;
- buf.timestamp.tv_usec = 0;
- buf.flags = 0;
-
- return v4l2_overlay_ioctl(fd, VIDIOC_QBUF, &buf, "qbuf");
-}
-
-int v4l2_overlay_dq_buf(int fd, int *index, int zerocopy)
-{
- struct v4l2_buffer buf;
- int ret;
-
- buf.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
- if (zerocopy)
- buf.memory = V4L2_MEMORY_USERPTR;
- else
- buf.memory = V4L2_MEMORY_MMAP;
-
- ret = v4l2_overlay_ioctl(fd, VIDIOC_DQBUF, &buf, "dqbuf");
- if (ret)
- return ret;
- *index = buf.index;
- return 0;
-}
diff --git a/liboverlay/v4l2_utils.h b/liboverlay/v4l2_utils.h
deleted file mode 100644
index 02797c3..0000000
--- a/liboverlay/v4l2_utils.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2009 Google Inc. All Rights Reserved.
- * Author: rschultz@google.com (Rebecca Schultz Zavin)
- */
-
-#ifndef ANDROID_ZOOM_REPO_HARDWARE_SEC_LIBOVERLAY_V4L2_UTILS_H_
-#define ANDROID_ZOOM_REPO_HARDWARE_SEC_LIBOVERLAY_V4L2_UTILS_H_
-
-#include "s5p_fimc.h"
-
-int v4l2_overlay_open(int id);
-int v4l2_overlay_get_caps(int fd, struct v4l2_capability *caps);
-int v4l2_overlay_req_buf(int fd, uint32_t *num_bufs, int cacheable_buffers,
- int zerocopy);
-int v4l2_overlay_query_buffer(int fd, int index, struct v4l2_buffer *buf);
-int v4l2_overlay_map_buf(int fd, int index, void **start, size_t *len);
-int v4l2_overlay_unmap_buf(void *start, size_t len);
-int v4l2_overlay_stream_on(int fd);
-int v4l2_overlay_stream_off(int fd);
-int v4l2_overlay_q_buf(int fd, int index, int zerocopy);
-int v4l2_overlay_dq_buf(int fd, int *index, int zerocopy);
-int v4l2_overlay_init(int fd, uint32_t w, uint32_t h, uint32_t fmt,
- uint32_t addr);
-int v4l2_overlay_get_input_size(int fd, uint32_t *w, uint32_t *h,
- uint32_t *fmt);
-int v4l2_overlay_set_position(int fd, int32_t x, int32_t y, int32_t w,
- int32_t h, int rotation);
-int v4l2_overlay_get_position(int fd, int32_t *x, int32_t *y, int32_t *w,
- int32_t *h);
-int v4l2_overlay_set_crop(int fd, uint32_t x, uint32_t y, uint32_t w,
- uint32_t h);
-int v4l2_overlay_get_crop(int fd, uint32_t *x, uint32_t *y, uint32_t *w,
- uint32_t *h);
-int v4l2_overlay_set_flip(int fd, int degree);
-int v4l2_overlay_set_rotation(int fd, int degree, int step);
-int v4l2_overlay_set_colorkey(int fd, int enable, int colorkey);
-int v4l2_overlay_set_global_alpha(int fd, int enable, int alpha);
-int v4l2_overlay_set_local_alpha(int fd, int enable);
-int v4l2_overlay_init_fimc(int fd, s5p_fimc_t *s5p_fimc);
-int v4l2_overlay_s_fbuf(int fd, int rotation);
-
-enum {
- V4L2_OVERLAY_PLANE_GRAPHICS,
- V4L2_OVERLAY_PLANE_VIDEO1,
- V4L2_OVERLAY_PLANE_VIDEO2,
-};
-
-enum {
- /* support customed format for zero copy */
- HAL_PIXEL_FORMAT_YCbCr_420_SP = 0x21,
- HAL_PIXEL_FORMAT_YCbCr_420_P = 0x13,
- HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP = 0x100,
- HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I = 0x101,
- HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I = 0x102,
- HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP = 0x103,
- HAL_PIXEL_FORMAT_CUSTOM_MAX
-};
-
-enum {
- PFT_RGB,
- PFT_YUV420,
- PFT_YUV422,
- PFT_YUV444,
-};
-
-struct mapping_data {
- int fd;
- size_t length;
- uint32_t offset;
- void *ptr;
-};
-
-#define ALL_BUFFERS_FLUSHED -66
-
-#endif /* ANDROID_ZOOM_REPO_HARDWARE_SEC_LIBOVERLAY_V4L2_UTILS_H_*/
diff --git a/libs3cjpeg/Android.mk b/libs3cjpeg/Android.mk
deleted file mode 100644
index 7a1acd6..0000000
--- a/libs3cjpeg/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-ifeq ($(Y_U_NO_HAVE_CAMERA),true)
-# Copyright (C) 2008 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-
-LOCAL_C_INCLUDES := $(LOCAL_PATH)
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../include
-
-LOCAL_SRC_FILES:= \
- JpegEncoder.cpp
-
-LOCAL_SHARED_LIBRARIES:= liblog
-LOCAL_SHARED_LIBRARIES+= libdl
-
-LOCAL_MODULE:= libs3cjpeg.aries
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_PRELINK_MODULE := false
-
-include $(BUILD_SHARED_LIBRARY)
-endif
diff --git a/libs3cjpeg/Exif.h b/libs3cjpeg/Exif.h
deleted file mode 100644
index 96e11dd..0000000
--- a/libs3cjpeg/Exif.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Copyright Samsung Electronics Co.,LTD.
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef ANDROID_HARDWARE_EXIF_H
-#define ANDROID_HARDWARE_EXIF_H
-
-#include <math.h>
-
-#define EXIF_LOG2(x) (log((double)(x)) / log(2.0))
-#define APEX_FNUM_TO_APERTURE(x) ((int)(EXIF_LOG2((double)(x)) * 2 + 0.5))
-#define APEX_EXPOSURE_TO_SHUTTER(x) ((x) >= 1 ? \
- (int)(-(EXIF_LOG2((double)(x)) + 0.5)) : \
- (int)(-(EXIF_LOG2((double)(x)) - 0.5)))
-#define APEX_ISO_TO_FILMSENSITIVITY(x) ((int)(EXIF_LOG2((x) / 3.125) + 0.5))
-
-#define NUM_SIZE 2
-#define IFD_SIZE 12
-#define OFFSET_SIZE 4
-
-#define NUM_0TH_IFD_TIFF 10
-#define NUM_0TH_IFD_EXIF 22
-#define NUM_0TH_IFD_GPS 10
-#define NUM_1TH_IFD_TIFF 9
-
-/* Type */
-#define EXIF_TYPE_BYTE 1
-#define EXIF_TYPE_ASCII 2
-#define EXIF_TYPE_SHORT 3
-#define EXIF_TYPE_LONG 4
-#define EXIF_TYPE_RATIONAL 5
-#define EXIF_TYPE_UNDEFINED 7
-#define EXIF_TYPE_SLONG 9
-#define EXIF_TYPE_SRATIONAL 10
-
-#define EXIF_FILE_SIZE 28800
-
-/* 0th IFD TIFF Tags */
-#define EXIF_TAG_IMAGE_WIDTH 0x0100
-#define EXIF_TAG_IMAGE_HEIGHT 0x0101
-#define EXIF_TAG_MAKE 0x010f
-#define EXIF_TAG_MODEL 0x0110
-#define EXIF_TAG_ORIENTATION 0x0112
-#define EXIF_TAG_SOFTWARE 0x0131
-#define EXIF_TAG_DATE_TIME 0x0132
-#define EXIF_TAG_YCBCR_POSITIONING 0x0213
-#define EXIF_TAG_EXIF_IFD_POINTER 0x8769
-#define EXIF_TAG_GPS_IFD_POINTER 0x8825
-
-/* 0th IFD Exif Private Tags */
-#define EXIF_TAG_EXPOSURE_TIME 0x829A
-#define EXIF_TAG_FNUMBER 0x829D
-#define EXIF_TAG_EXPOSURE_PROGRAM 0x8822
-#define EXIF_TAG_ISO_SPEED_RATING 0x8827
-#define EXIF_TAG_EXIF_VERSION 0x9000
-#define EXIF_TAG_DATE_TIME_ORG 0x9003
-#define EXIF_TAG_DATE_TIME_DIGITIZE 0x9004
-#define EXIF_TAG_SHUTTER_SPEED 0x9201
-#define EXIF_TAG_APERTURE 0x9202
-#define EXIF_TAG_BRIGHTNESS 0x9203
-#define EXIF_TAG_EXPOSURE_BIAS 0x9204
-#define EXIF_TAG_MAX_APERTURE 0x9205
-#define EXIF_TAG_METERING_MODE 0x9207
-#define EXIF_TAG_FLASH 0x9209
-#define EXIF_TAG_FOCAL_LENGTH 0x920A
-#define EXIF_TAG_USER_COMMENT 0x9286
-#define EXIF_TAG_COLOR_SPACE 0xA001
-#define EXIF_TAG_PIXEL_X_DIMENSION 0xA002
-#define EXIF_TAG_PIXEL_Y_DIMENSION 0xA003
-#define EXIF_TAG_EXPOSURE_MODE 0xA402
-#define EXIF_TAG_WHITE_BALANCE 0xA403
-#define EXIF_TAG_SCENCE_CAPTURE_TYPE 0xA406
-
-/* 0th IFD GPS Info Tags */
-#define EXIF_TAG_GPS_VERSION_ID 0x0000
-#define EXIF_TAG_GPS_LATITUDE_REF 0x0001
-#define EXIF_TAG_GPS_LATITUDE 0x0002
-#define EXIF_TAG_GPS_LONGITUDE_REF 0x0003
-#define EXIF_TAG_GPS_LONGITUDE 0x0004
-#define EXIF_TAG_GPS_ALTITUDE_REF 0x0005
-#define EXIF_TAG_GPS_ALTITUDE 0x0006
-#define EXIF_TAG_GPS_TIMESTAMP 0x0007
-#define EXIF_TAG_GPS_PROCESSING_METHOD 0x001B
-#define EXIF_TAG_GPS_DATESTAMP 0x001D
-
-/* 1th IFD TIFF Tags */
-#define EXIF_TAG_COMPRESSION_SCHEME 0x0103
-#define EXIF_TAG_X_RESOLUTION 0x011A
-#define EXIF_TAG_Y_RESOLUTION 0x011B
-#define EXIF_TAG_RESOLUTION_UNIT 0x0128
-#define EXIF_TAG_JPEG_INTERCHANGE_FORMAT 0x0201
-#define EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LEN 0x0202
-
-
-typedef enum {
- EXIF_ORIENTATION_UP = 1,
- EXIF_ORIENTATION_90 = 6,
- EXIF_ORIENTATION_180 = 3,
- EXIF_ORIENTATION_270 = 8,
-} ExifOrientationType;
-
-typedef enum {
- EXIF_SCENE_STANDARD,
- EXIF_SCENE_LANDSCAPE,
- EXIF_SCENE_PORTRAIT,
- EXIF_SCENE_NIGHT,
-} CamExifSceneCaptureType;
-
-typedef enum {
- EXIF_METERING_UNKNOWN,
- EXIF_METERING_AVERAGE,
- EXIF_METERING_CENTER,
- EXIF_METERING_SPOT,
- EXIF_METERING_MULTISPOT,
- EXIF_METERING_PATTERN,
- EXIF_METERING_PARTIAL,
- EXIF_METERING_OTHER = 255,
-} CamExifMeteringModeType;
-
-typedef enum {
- EXIF_EXPOSURE_AUTO,
- EXIF_EXPOSURE_MANUAL,
- EXIF_EXPOSURE_AUTO_BRACKET,
-} CamExifExposureModeType;
-
-typedef enum {
- EXIF_WB_AUTO,
- EXIF_WB_MANUAL,
-} CamExifWhiteBalanceType;
-
-/* Values */
-#define EXIF_DEF_MAKER "SAMSUNG"
-#define EXIF_DEF_MODEL "GT-I9020"
-#define EXIF_DEF_SOFTWARE "CRESPOJH2"
-#define EXIF_DEF_EXIF_VERSION "0220"
-#define EXIF_DEF_USERCOMMENTS "User comments"
-
-#define EXIF_DEF_YCBCR_POSITIONING 1 /* centered */
-#define EXIF_DEF_FNUMBER_NUM 26 /* 2.6 */
-#define EXIF_DEF_FNUMBER_DEN 10
-#define EXIF_DEF_EXPOSURE_PROGRAM 3 /* aperture priority */
-#define EXIF_DEF_FOCAL_LEN_NUM 278 /* 2.78mm */
-#define EXIF_DEF_FOCAL_LEN_DEN 100
-#define EXIF_DEF_FLASH 0 /* O: off, 1: on*/
-#define EXIF_DEF_COLOR_SPACE 1
-#define EXIF_DEF_EXPOSURE_MODE EXIF_EXPOSURE_AUTO
-#define EXIF_DEF_APEX_DEN 10
-
-#define EXIF_DEF_COMPRESSION 6
-#define EXIF_DEF_RESOLUTION_NUM 72
-#define EXIF_DEF_RESOLUTION_DEN 1
-#define EXIF_DEF_RESOLUTION_UNIT 2 /* inches */
-
-typedef struct {
- uint32_t num;
- uint32_t den;
-} rational_t;
-
-typedef struct {
- int32_t num;
- int32_t den;
-} srational_t;
-
-typedef struct {
- bool enableGps;
- bool enableThumb;
-
- unsigned char maker[32];
- unsigned char model[32];
- unsigned char software[32];
- unsigned char exif_version[4];
- unsigned char date_time[20];
- unsigned char user_comment[150];
-
- uint32_t width;
- uint32_t height;
- uint32_t widthThumb;
- uint32_t heightThumb;
-
- uint16_t orientation;
- uint16_t ycbcr_positioning;
- uint16_t exposure_program;
- uint16_t iso_speed_rating;
- uint16_t metering_mode;
- uint16_t flash;
- uint16_t color_space;
- uint16_t exposure_mode;
- uint16_t white_balance;
- uint16_t scene_capture_type;
-
- rational_t exposure_time;
- rational_t fnumber;
- rational_t aperture;
- rational_t max_aperture;
- rational_t focal_length;
-
- srational_t shutter_speed;
- srational_t brightness;
- srational_t exposure_bias;
-
- unsigned char gps_latitude_ref[2];
- unsigned char gps_longitude_ref[2];
-
- uint8_t gps_version_id[4];
- uint8_t gps_altitude_ref;
-
- rational_t gps_latitude[3];
- rational_t gps_longitude[3];
- rational_t gps_altitude;
- rational_t gps_timestamp[3];
- unsigned char gps_datestamp[11];
- unsigned char gps_processing_method[100];
-
- rational_t x_resolution;
- rational_t y_resolution;
- uint16_t resolution_unit;
- uint16_t compression_scheme;
-} exif_attribute_t;
-
-
-#endif /* ANDROID_HARDWARE_EXIF_H */
diff --git a/libs3cjpeg/JpegEncoder.cpp b/libs3cjpeg/JpegEncoder.cpp
deleted file mode 100644
index 1361bca..0000000
--- a/libs3cjpeg/JpegEncoder.cpp
+++ /dev/null
@@ -1,796 +0,0 @@
-/*
- * Copyright Samsung Electronics Co.,LTD.
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * JPEG DRIVER MODULE (JpegEncoder.cpp)
- * Author : ge.lee -- initial version
- * Date : 03 June 2010
- * Purpose : This file implements the JPEG encoder APIs as needed by Camera HAL
- */
-#define LOG_TAG "JpegEncoder"
-#define MAIN_DUMP 0
-#define THUMB_DUMP 0
-
-#include <utils/Log.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-
-#include "JpegEncoder.h"
-
-static const char ExifAsciiPrefix[] = { 0x41, 0x53, 0x43, 0x49, 0x49, 0x0, 0x0, 0x0 };
-
-namespace android {
-JpegEncoder::JpegEncoder() : available(false)
-{
- mArgs.mmapped_addr = (char *)MAP_FAILED;
- mArgs.enc_param = NULL;
- mArgs.thumb_enc_param = NULL;
-
- mDevFd = open(JPG_DRIVER_NAME, O_RDWR);
- if (mDevFd < 0) {
- LOGE("Failed to open the device");
- return;
- }
-
- mArgs.mmapped_addr = (char *)mmap(0,
- JPG_TOTAL_BUF_SIZE,
- PROT_READ | PROT_WRITE,
- MAP_SHARED,
- mDevFd,
- 0);
-
- if (mArgs.mmapped_addr == MAP_FAILED) {
- LOGE("Failed to mmap");
- return;
- }
-
- mArgs.enc_param = new jpg_enc_proc_param;
- if (mArgs.enc_param == NULL) {
- LOGE("Failed to allocate the memory for enc_param");
- return;
- }
- memset(mArgs.enc_param, 0, sizeof(jpg_enc_proc_param));
-
- mArgs.thumb_enc_param = new jpg_enc_proc_param;
- if (mArgs.thumb_enc_param == NULL) {
- LOGE("Failed to allocate the memory for thumb_enc_param");
- delete mArgs.enc_param;
- return;
- }
- memset(mArgs.thumb_enc_param, 0, sizeof(jpg_enc_proc_param));
-
- mArgs.enc_param->sample_mode = JPG_420;
- mArgs.enc_param->enc_type = JPG_MAIN;
- mArgs.thumb_enc_param->sample_mode = JPG_420;
- mArgs.thumb_enc_param->enc_type = JPG_THUMBNAIL;
-
- available = true;
-}
-
-JpegEncoder::~JpegEncoder()
-{
- if (mArgs.mmapped_addr != (char*)MAP_FAILED)
- munmap(mArgs.mmapped_addr, JPG_TOTAL_BUF_SIZE);
-
- delete mArgs.enc_param;
-
- delete mArgs.thumb_enc_param;
-
- if (mDevFd > 0)
- close(mDevFd);
-}
-
-jpg_return_status JpegEncoder::setConfig(jpeg_conf type, int32_t value)
-{
- if (!available)
- return JPG_FAIL;
-
- jpg_return_status ret = JPG_SUCCESS;
-
- switch (type) {
- case JPEG_SET_ENCODE_WIDTH:
- if (value < 0 || value > MAX_JPG_WIDTH)
- ret = JPG_FAIL;
- else
- mArgs.enc_param->width = value;
- break;
-
- case JPEG_SET_ENCODE_HEIGHT:
- if (value < 0 || value > MAX_JPG_HEIGHT)
- ret = JPG_FAIL;
- else
- mArgs.enc_param->height = value;
- break;
-
- case JPEG_SET_ENCODE_QUALITY:
- if (value < JPG_QUALITY_LEVEL_1 || value > JPG_QUALITY_LEVEL_4)
- ret = JPG_FAIL;
- else
- mArgs.enc_param->quality = (image_quality_type_t)value;
- break;
-
- case JPEG_SET_ENCODE_IN_FORMAT:
- if (value != JPG_MODESEL_YCBCR && value != JPG_MODESEL_RGB) {
- ret = JPG_FAIL;
- } else {
- mArgs.enc_param->in_format = (in_mode_t)value;
- mArgs.thumb_enc_param->in_format = (in_mode_t)value;
- }
- break;
-
- case JPEG_SET_SAMPING_MODE:
- if (value != JPG_420 && value != JPG_422) {
- ret = JPG_FAIL;
- } else {
- mArgs.enc_param->sample_mode = (sample_mode_t)value;
- mArgs.thumb_enc_param->sample_mode = (sample_mode_t)value;
- }
- break;
-
- case JPEG_SET_THUMBNAIL_WIDTH:
- if (value < 0 || value > MAX_JPG_THUMBNAIL_WIDTH)
- ret = JPG_FAIL;
- else
- mArgs.thumb_enc_param->width = value;
- break;
-
- case JPEG_SET_THUMBNAIL_HEIGHT:
- if (value < 0 || value > MAX_JPG_THUMBNAIL_HEIGHT)
- ret = JPG_FAIL;
- else
- mArgs.thumb_enc_param->height = value;
- break;
-
- default:
- LOGE("Invalid Config type");
- ret = ERR_UNKNOWN;
- }
-
- if (ret == JPG_FAIL)
- LOGE("Invalid value(%d) for %d type", value, type);
-
- return ret;
-}
-
-void* JpegEncoder::getInBuf(uint64_t size)
-{
- if (!available)
- return NULL;
-
- if (size > JPG_FRAME_BUF_SIZE) {
- LOGE("The buffer size requested is too large");
- return NULL;
- }
- mArgs.in_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_FRMBUF, mArgs.mmapped_addr);
- return (void *)(mArgs.in_buf);
-}
-
-void* JpegEncoder::getOutBuf(uint64_t *size)
-{
- if (!available)
- return NULL;
-
- if (mArgs.enc_param->file_size <= 0) {
- LOGE("The buffer requested doesn't have data");
- return NULL;
- }
- mArgs.out_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_STRBUF, mArgs.mmapped_addr);
- *size = mArgs.enc_param->file_size;
- return (void *)(mArgs.out_buf);
-}
-
-void* JpegEncoder::getThumbInBuf(uint64_t size)
-{
- if (!available)
- return NULL;
-
- if (size > JPG_FRAME_THUMB_BUF_SIZE) {
- LOGE("The buffer size requested is too large");
- return NULL;
- }
- mArgs.in_thumb_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_THUMB_FRMBUF, mArgs.mmapped_addr);
- return (void *)(mArgs.in_thumb_buf);
-}
-
-void* JpegEncoder::getThumbOutBuf(uint64_t *size)
-{
- if (!available)
- return NULL;
-
- if (mArgs.thumb_enc_param->file_size <= 0) {
- LOGE("The buffer requested doesn't have data");
- return NULL;
- }
- mArgs.out_thumb_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_THUMB_STRBUF, mArgs.mmapped_addr);
- *size = mArgs.thumb_enc_param->file_size;
- return (void *)(mArgs.out_thumb_buf);
-}
-
-jpg_return_status JpegEncoder::encode(unsigned int *size, exif_attribute_t *exifInfo)
-{
- if (!available)
- return JPG_FAIL;
-
- LOGD("encode E");
-
- jpg_return_status ret = JPG_FAIL;
- unsigned char *exifOut = NULL;
- jpg_enc_proc_param *param = mArgs.enc_param;
-
- ret = checkMcu(param->sample_mode, param->width, param->height, false);
- if (ret != JPG_SUCCESS)
- return ret;
-
- param->enc_type = JPG_MAIN;
- ret = (jpg_return_status)ioctl(mDevFd, IOCTL_JPG_ENCODE, &mArgs);
- if (ret != JPG_SUCCESS) {
- LOGE("Failed to encode main image");
- return ret;
- }
-
- mArgs.out_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_STRBUF, mArgs.mmapped_addr);
-
- if (exifInfo) {
- unsigned int thumbLen, exifLen;
-
- uint_t bufSize = 0;
- if (exifInfo->enableThumb) {
- ret = encodeThumbImg(&thumbLen);
- if (ret != JPG_SUCCESS) {
- LOGE("Failed to encode for thumbnail image");
- bufSize = EXIF_FILE_SIZE;
- exifInfo->enableThumb = false;
- } else {
- bufSize = EXIF_FILE_SIZE + thumbLen;
- }
- } else {
- bufSize = EXIF_FILE_SIZE;
- }
-
- if (mArgs.enc_param->file_size + bufSize > JPG_TOTAL_BUF_SIZE)
- return ret;
-
- exifOut = new unsigned char[bufSize];
- if (exifOut == NULL) {
- LOGE("Failed to allocate for exifOut");
- return ret;
- }
- memset(exifOut, 0, bufSize);
-
- ret = makeExif (exifOut, exifInfo, &exifLen);
- if (ret != JPG_SUCCESS) {
- LOGE("Failed to make EXIF");
- delete[] exifOut;
- return ret;
- }
-
- memmove(&mArgs.out_buf[exifLen + 2], &mArgs.out_buf[2], param->file_size - 2);
- memcpy(&mArgs.out_buf[2], exifOut, exifLen);
- param->file_size += exifLen;
- }
-
- delete[] exifOut;
-
- *size = param->file_size;
-
-#if MAIN_DUMP
- FILE *fout = NULL;
- char file_name[50] = "/data/main.jpg";
- fout = fopen(file_name, "wb");
- if (!fout)
- perror(&file_name[0]);
- size_t nwrite = fwrite(mArgs.out_buf, sizeof(char), param->file_size, fout);
- fclose(fout);
-#endif
-
- LOGD("encode X");
-
- return ret;
-}
-
-jpg_return_status JpegEncoder::encodeThumbImg(unsigned int *size, bool useMain)
-{
- if (!available)
- return JPG_FAIL;
-
- LOGD("encodeThumbImg E");
-
- jpg_return_status ret = JPG_FAIL;
- jpg_enc_proc_param *param = mArgs.thumb_enc_param;
-
- if (useMain) {
- mArgs.in_thumb_buf = (char *)getThumbInBuf(param->width*param->height*2);
- if (mArgs.in_thumb_buf == NULL) {
- LOGE("Failed to get the buffer for thumbnail");
- return JPG_FAIL;
- }
-
- ret = (jpg_return_status)scaleDownYuv422(mArgs.in_buf,
- mArgs.enc_param->width,
- mArgs.enc_param->height,
- mArgs.in_thumb_buf,
- param->width,
- param->height);
- if (ret != JPG_SUCCESS)
- return JPG_FAIL;
- }
-
- ret = checkMcu(param->sample_mode, param->width, param->height, true);
- if (ret != JPG_SUCCESS)
- return JPG_FAIL;
-
- mArgs.enc_param->enc_type = JPG_THUMBNAIL;
- ret = (jpg_return_status)ioctl(mDevFd, IOCTL_JPG_ENCODE, &mArgs);
- if (ret != JPG_SUCCESS) {
- LOGE("Failed to encode for thumbnail");
- return JPG_FAIL;
- }
-
- mArgs.out_thumb_buf = (char *)ioctl(mDevFd, IOCTL_JPG_GET_THUMB_STRBUF, mArgs.mmapped_addr);
-
-#if THUMB_DUMP
- FILE *fout = NULL;
- char file_name[50] = "/data/thumb.jpg";
- fout = fopen(file_name, "wb");
- if (!fout)
- perror(&file_name[0]);
- size_t nwrite = fwrite(mArgs.out_thumb_buf, sizeof(char), param->file_size, fout);
- fclose(fout);
-#endif
-
- LOGD("encodeThumbImg X");
-
- return JPG_SUCCESS;
-}
-
-jpg_return_status JpegEncoder::makeExif (unsigned char *exifOut,
- exif_attribute_t *exifInfo,
- unsigned int *size,
- bool useMainbufForThumb)
-{
- if (!available)
- return JPG_FAIL;
-
- LOGD("makeExif E");
-
- unsigned char *pCur, *pApp1Start, *pIfdStart, *pGpsIfdPtr, *pNextIfdOffset;
- unsigned int tmp, LongerTagOffest = 0;
- pApp1Start = pCur = exifOut;
-
- //2 Exif Identifier Code & TIFF Header
- pCur += 4; // Skip 4 Byte for APP1 marker and length
- unsigned char ExifIdentifierCode[6] = { 0x45, 0x78, 0x69, 0x66, 0x00, 0x00 };
- memcpy(pCur, ExifIdentifierCode, 6);
- pCur += 6;
-
- /* Byte Order - little endian, Offset of IFD - 0x00000008.H */
- unsigned char TiffHeader[8] = { 0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00 };
- memcpy(pCur, TiffHeader, 8);
- pIfdStart = pCur;
- pCur += 8;
-
- //2 0th IFD TIFF Tags
- if (exifInfo->enableGps)
- tmp = NUM_0TH_IFD_TIFF;
- else
- tmp = NUM_0TH_IFD_TIFF - 1;
-
- memcpy(pCur, &tmp, NUM_SIZE);
- pCur += NUM_SIZE;
-
- LongerTagOffest += 8 + NUM_SIZE + tmp*IFD_SIZE + OFFSET_SIZE;
-
- writeExifIfd(&pCur, EXIF_TAG_IMAGE_WIDTH, EXIF_TYPE_LONG,
- 1, exifInfo->width);
- writeExifIfd(&pCur, EXIF_TAG_IMAGE_HEIGHT, EXIF_TYPE_LONG,
- 1, exifInfo->height);
- writeExifIfd(&pCur, EXIF_TAG_MAKE, EXIF_TYPE_ASCII,
- strlen((char *)exifInfo->maker) + 1, exifInfo->maker, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_MODEL, EXIF_TYPE_ASCII,
- strlen((char *)exifInfo->model) + 1, exifInfo->model, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_ORIENTATION, EXIF_TYPE_SHORT,
- 1, exifInfo->orientation);
- writeExifIfd(&pCur, EXIF_TAG_SOFTWARE, EXIF_TYPE_ASCII,
- strlen((char *)exifInfo->software) + 1, exifInfo->software, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_DATE_TIME, EXIF_TYPE_ASCII,
- 20, exifInfo->date_time, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_YCBCR_POSITIONING, EXIF_TYPE_SHORT,
- 1, exifInfo->ycbcr_positioning);
- writeExifIfd(&pCur, EXIF_TAG_EXIF_IFD_POINTER, EXIF_TYPE_LONG,
- 1, LongerTagOffest);
- if (exifInfo->enableGps) {
- pGpsIfdPtr = pCur;
- pCur += IFD_SIZE; // Skip a ifd size for gps IFD pointer
- }
-
- pNextIfdOffset = pCur; // Skip a offset size for next IFD offset
- pCur += OFFSET_SIZE;
-
- //2 0th IFD Exif Private Tags
- pCur = pIfdStart + LongerTagOffest;
-
- tmp = NUM_0TH_IFD_EXIF;
- memcpy(pCur, &tmp , NUM_SIZE);
- pCur += NUM_SIZE;
-
- LongerTagOffest += NUM_SIZE + NUM_0TH_IFD_EXIF*IFD_SIZE + OFFSET_SIZE;
-
- writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_TIME, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->exposure_time, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_FNUMBER, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->fnumber, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_PROGRAM, EXIF_TYPE_SHORT,
- 1, exifInfo->exposure_program);
- writeExifIfd(&pCur, EXIF_TAG_ISO_SPEED_RATING, EXIF_TYPE_SHORT,
- 1, exifInfo->iso_speed_rating);
- writeExifIfd(&pCur, EXIF_TAG_EXIF_VERSION, EXIF_TYPE_UNDEFINED,
- 4, exifInfo->exif_version);
- writeExifIfd(&pCur, EXIF_TAG_DATE_TIME_ORG, EXIF_TYPE_ASCII,
- 20, exifInfo->date_time, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_DATE_TIME_DIGITIZE, EXIF_TYPE_ASCII,
- 20, exifInfo->date_time, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_SHUTTER_SPEED, EXIF_TYPE_SRATIONAL,
- 1, (rational_t *)&exifInfo->shutter_speed, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_APERTURE, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->aperture, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_BRIGHTNESS, EXIF_TYPE_SRATIONAL,
- 1, (rational_t *)&exifInfo->brightness, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_BIAS, EXIF_TYPE_SRATIONAL,
- 1, (rational_t *)&exifInfo->exposure_bias, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_MAX_APERTURE, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->max_aperture, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_METERING_MODE, EXIF_TYPE_SHORT,
- 1, exifInfo->metering_mode);
- writeExifIfd(&pCur, EXIF_TAG_FLASH, EXIF_TYPE_SHORT,
- 1, exifInfo->flash);
- writeExifIfd(&pCur, EXIF_TAG_FOCAL_LENGTH, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->focal_length, &LongerTagOffest, pIfdStart);
- char code[8] = { 0x00, 0x00, 0x00, 0x49, 0x49, 0x43, 0x53, 0x41 };
- int commentsLen = strlen((char *)exifInfo->user_comment) + 1;
- memmove(exifInfo->user_comment + sizeof(code), exifInfo->user_comment, commentsLen);
- memcpy(exifInfo->user_comment, code, sizeof(code));
- writeExifIfd(&pCur, EXIF_TAG_USER_COMMENT, EXIF_TYPE_UNDEFINED,
- commentsLen + sizeof(code), exifInfo->user_comment, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_COLOR_SPACE, EXIF_TYPE_SHORT,
- 1, exifInfo->color_space);
- writeExifIfd(&pCur, EXIF_TAG_PIXEL_X_DIMENSION, EXIF_TYPE_LONG,
- 1, exifInfo->width);
- writeExifIfd(&pCur, EXIF_TAG_PIXEL_Y_DIMENSION, EXIF_TYPE_LONG,
- 1, exifInfo->height);
- writeExifIfd(&pCur, EXIF_TAG_EXPOSURE_MODE, EXIF_TYPE_LONG,
- 1, exifInfo->exposure_mode);
- writeExifIfd(&pCur, EXIF_TAG_WHITE_BALANCE, EXIF_TYPE_LONG,
- 1, exifInfo->white_balance);
- writeExifIfd(&pCur, EXIF_TAG_SCENCE_CAPTURE_TYPE, EXIF_TYPE_LONG,
- 1, exifInfo->scene_capture_type);
- tmp = 0;
- memcpy(pCur, &tmp, OFFSET_SIZE); // next IFD offset
- pCur += OFFSET_SIZE;
-
- //2 0th IFD GPS Info Tags
- if (exifInfo->enableGps) {
- writeExifIfd(&pGpsIfdPtr, EXIF_TAG_GPS_IFD_POINTER, EXIF_TYPE_LONG,
- 1, LongerTagOffest); // GPS IFD pointer skipped on 0th IFD
-
- pCur = pIfdStart + LongerTagOffest;
-
- if (exifInfo->gps_processing_method[0] == 0) {
- // don't create GPS_PROCESSING_METHOD tag if there isn't any
- tmp = NUM_0TH_IFD_GPS - 1;
- } else {
- tmp = NUM_0TH_IFD_GPS;
- }
- memcpy(pCur, &tmp, NUM_SIZE);
- pCur += NUM_SIZE;
-
- LongerTagOffest += NUM_SIZE + tmp*IFD_SIZE + OFFSET_SIZE;
-
- writeExifIfd(&pCur, EXIF_TAG_GPS_VERSION_ID, EXIF_TYPE_BYTE,
- 4, exifInfo->gps_version_id);
- writeExifIfd(&pCur, EXIF_TAG_GPS_LATITUDE_REF, EXIF_TYPE_ASCII,
- 2, exifInfo->gps_latitude_ref);
- writeExifIfd(&pCur, EXIF_TAG_GPS_LATITUDE, EXIF_TYPE_RATIONAL,
- 3, exifInfo->gps_latitude, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_GPS_LONGITUDE_REF, EXIF_TYPE_ASCII,
- 2, exifInfo->gps_longitude_ref);
- writeExifIfd(&pCur, EXIF_TAG_GPS_LONGITUDE, EXIF_TYPE_RATIONAL,
- 3, exifInfo->gps_longitude, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_GPS_ALTITUDE_REF, EXIF_TYPE_BYTE,
- 1, exifInfo->gps_altitude_ref);
- writeExifIfd(&pCur, EXIF_TAG_GPS_ALTITUDE, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->gps_altitude, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_GPS_TIMESTAMP, EXIF_TYPE_RATIONAL,
- 3, exifInfo->gps_timestamp, &LongerTagOffest, pIfdStart);
- tmp = strlen((char*)exifInfo->gps_processing_method);
- if (tmp > 0) {
- if (tmp > 100) {
- tmp = 100;
- }
- unsigned char tmp_buf[100+sizeof(ExifAsciiPrefix)];
- memcpy(tmp_buf, ExifAsciiPrefix, sizeof(ExifAsciiPrefix));
- memcpy(&tmp_buf[sizeof(ExifAsciiPrefix)], exifInfo->gps_processing_method, tmp);
- writeExifIfd(&pCur, EXIF_TAG_GPS_PROCESSING_METHOD, EXIF_TYPE_UNDEFINED,
- tmp+sizeof(ExifAsciiPrefix), tmp_buf, &LongerTagOffest, pIfdStart);
- }
- writeExifIfd(&pCur, EXIF_TAG_GPS_DATESTAMP, EXIF_TYPE_ASCII,
- 11, exifInfo->gps_datestamp, &LongerTagOffest, pIfdStart);
- tmp = 0;
- memcpy(pCur, &tmp, OFFSET_SIZE); // next IFD offset
- pCur += OFFSET_SIZE;
- }
-
- //2 1th IFD TIFF Tags
- char *thumbBuf;
- int thumbSize;
-
- if (useMainbufForThumb) {
- thumbBuf = mArgs.out_buf;
- thumbSize = mArgs.enc_param->file_size;
- } else {
- thumbBuf = mArgs.out_thumb_buf;
- thumbSize = mArgs.thumb_enc_param->file_size;
- }
-
- if (exifInfo->enableThumb && (thumbBuf != NULL) && (thumbSize > 0)) {
- tmp = LongerTagOffest;
- memcpy(pNextIfdOffset, &tmp, OFFSET_SIZE); // NEXT IFD offset skipped on 0th IFD
-
- pCur = pIfdStart + LongerTagOffest;
-
- tmp = NUM_1TH_IFD_TIFF;
- memcpy(pCur, &tmp, NUM_SIZE);
- pCur += NUM_SIZE;
-
- LongerTagOffest += NUM_SIZE + NUM_1TH_IFD_TIFF*IFD_SIZE + OFFSET_SIZE;
-
- writeExifIfd(&pCur, EXIF_TAG_IMAGE_WIDTH, EXIF_TYPE_LONG,
- 1, exifInfo->widthThumb);
- writeExifIfd(&pCur, EXIF_TAG_IMAGE_HEIGHT, EXIF_TYPE_LONG,
- 1, exifInfo->heightThumb);
- writeExifIfd(&pCur, EXIF_TAG_COMPRESSION_SCHEME, EXIF_TYPE_SHORT,
- 1, exifInfo->compression_scheme);
- writeExifIfd(&pCur, EXIF_TAG_ORIENTATION, EXIF_TYPE_SHORT,
- 1, exifInfo->orientation);
- writeExifIfd(&pCur, EXIF_TAG_X_RESOLUTION, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->x_resolution, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_Y_RESOLUTION, EXIF_TYPE_RATIONAL,
- 1, &exifInfo->y_resolution, &LongerTagOffest, pIfdStart);
- writeExifIfd(&pCur, EXIF_TAG_RESOLUTION_UNIT, EXIF_TYPE_SHORT,
- 1, exifInfo->resolution_unit);
- writeExifIfd(&pCur, EXIF_TAG_JPEG_INTERCHANGE_FORMAT, EXIF_TYPE_LONG,
- 1, LongerTagOffest);
- writeExifIfd(&pCur, EXIF_TAG_JPEG_INTERCHANGE_FORMAT_LEN, EXIF_TYPE_LONG,
- 1, thumbSize);
-
- tmp = 0;
- memcpy(pCur, &tmp, OFFSET_SIZE); // next IFD offset
- pCur += OFFSET_SIZE;
-
- memcpy(pIfdStart + LongerTagOffest,
- thumbBuf, thumbSize);
- LongerTagOffest += thumbSize;
- } else {
- tmp = 0;
- memcpy(pNextIfdOffset, &tmp, OFFSET_SIZE); // NEXT IFD offset skipped on 0th IFD
- }
-
- unsigned char App1Marker[2] = { 0xff, 0xe1 };
- memcpy(pApp1Start, App1Marker, 2);
- pApp1Start += 2;
-
- *size = 10 + LongerTagOffest;
- tmp = *size - 2; // APP1 Maker isn't counted
- unsigned char size_mm[2] = {(tmp >> 8) & 0xFF, tmp & 0xFF};
- memcpy(pApp1Start, size_mm, 2);
-
- LOGD("makeExif X");
-
- return JPG_SUCCESS;
-}
-
-jpg_return_status JpegEncoder::checkMcu(sample_mode_t sampleMode,
- uint32_t width, uint32_t height, bool isThumb)
-{
- if (!available)
- return JPG_FAIL;
-
- uint32_t expectedWidth = width;
- uint32_t expectedHeight = height;
-
- switch (sampleMode){
- case JPG_422:
- if (width % 16 != 0)
- expectedWidth = width + 16 - (width % 16);
- if (height % 8 != 0)
- expectedHeight = height + 8 - (height % 8);
- break;
-
- case JPG_420:
- if (width % 16 != 0)
- expectedWidth = width + 16 - (width % 16);
- if (height % 16 != 0)
- expectedHeight = height + 16 - (height % 16);
- break;
-
- default:
- LOGE("Invaild sample mode");
- return JPG_FAIL;
- }
-
- if (expectedWidth == width && expectedHeight == height)
- return JPG_SUCCESS;
-
- LOGW("The image is not matched for MCU");
-
- uint32_t size = width*height * 2;
- char *srcBuf, *dstBuf;
-
- if ((srcBuf = new char[size]) == NULL) {
- LOGE("Failed to allocate for srcBuf");
- return JPG_FAIL;
- }
-
- if (!isThumb)
- dstBuf = mArgs.in_buf;
- else
- dstBuf = mArgs.in_thumb_buf;
-
- memcpy(srcBuf, dstBuf, size);
- bool ret = pad(srcBuf, width, height, dstBuf, expectedWidth, expectedHeight);
-
- delete[] srcBuf;
-
- return JPG_SUCCESS;
-}
-
-bool JpegEncoder::pad(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
- char *dstBuf, uint32_t dstWidth, uint32_t dstHight)
-{
- if (!available)
- return false;
-
- if (srcBuf == NULL || dstBuf == NULL) {
- LOGE("srcBuf or dstBuf is NULL");
- return false;
- }
-
- int padW = dstWidth - srcWidth;
- int padH = dstHight - srcHight;
-
- if ((int)(dstWidth - srcWidth) < 0 ||
- (int)(dstHight - srcHight) < 0) {
- LOGE("dstSize is smaller than srcSize");
- return false;
- }
- memset(dstBuf, 0, dstWidth*dstHight * 2);
-
- for (uint32_t i = 0; i < srcHight; i++)
- memcpy(dstBuf + i * dstWidth * 2, srcBuf + i * srcWidth * 2, srcWidth * 2);
-
- return true;
-}
-
-bool JpegEncoder::scaleDownYuv422(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
- char *dstBuf, uint32_t dstWidth, uint32_t dstHight)
-{
- if (!available)
- return false;
-
- int32_t step_x, step_y;
- int32_t iXsrc, iXdst;
- int32_t x, y, src_y_start_pos, dst_pos, src_pos;
-
- if (dstWidth % 2 != 0 || dstHight % 2 != 0){
- LOGE("scale_down_yuv422: invalid width, height for scaling");
- return false;
- }
-
- step_x = srcWidth / dstWidth;
- step_y = srcHight / dstHight;
-
- dst_pos = 0;
- for (uint32_t y = 0; y < dstHight; y++) {
- src_y_start_pos = (y * step_y * (srcWidth * 2));
-
- for (uint32_t x = 0; x < dstWidth; x += 2) {
- src_pos = src_y_start_pos + (x * (step_x * 2));
-
- dstBuf[dst_pos++] = srcBuf[src_pos ];
- dstBuf[dst_pos++] = srcBuf[src_pos + 1];
- dstBuf[dst_pos++] = srcBuf[src_pos + 2];
- dstBuf[dst_pos++] = srcBuf[src_pos + 3];
- }
- }
-
- return true;
-}
-
-inline void JpegEncoder::writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- uint32_t value)
-{
- memcpy(*pCur, &tag, 2);
- *pCur += 2;
- memcpy(*pCur, &type, 2);
- *pCur += 2;
- memcpy(*pCur, &count, 4);
- *pCur += 4;
- memcpy(*pCur, &value, 4);
- *pCur += 4;
-}
-
-inline void JpegEncoder::writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- unsigned char *pValue)
-{
- char buf[4] = { 0,};
-
- memcpy(buf, pValue, count);
- memcpy(*pCur, &tag, 2);
- *pCur += 2;
- memcpy(*pCur, &type, 2);
- *pCur += 2;
- memcpy(*pCur, &count, 4);
- *pCur += 4;
- memcpy(*pCur, buf, 4);
- *pCur += 4;
-}
-
-
-inline void JpegEncoder::writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- unsigned char *pValue,
- unsigned int *offset,
- unsigned char *start)
-{
- memcpy(*pCur, &tag, 2);
- *pCur += 2;
- memcpy(*pCur, &type, 2);
- *pCur += 2;
- memcpy(*pCur, &count, 4);
- *pCur += 4;
- memcpy(*pCur, offset, 4);
- *pCur += 4;
- memcpy(start + *offset, pValue, count);
- *offset += count;
-}
-
-inline void JpegEncoder::writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- rational_t *pValue,
- unsigned int *offset,
- unsigned char *start)
-{
- memcpy(*pCur, &tag, 2);
- *pCur += 2;
- memcpy(*pCur, &type, 2);
- *pCur += 2;
- memcpy(*pCur, &count, 4);
- *pCur += 4;
- memcpy(*pCur, offset, 4);
- *pCur += 4;
- memcpy(start + *offset, pValue, 8 * count);
- *offset += 8 * count;
-}
-
-};
diff --git a/libs3cjpeg/JpegEncoder.h b/libs3cjpeg/JpegEncoder.h
deleted file mode 100644
index b95b1b1..0000000
--- a/libs3cjpeg/JpegEncoder.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright Samsung Electronics Co.,LTD.
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * JPEG DRIVER MODULE (JpegEncoder.h)
- * Author : ge.lee -- initial version
- * Date : 03 June 2010
- * Purpose : This file implements the JPEG encoder APIs as needed by Camera HAL
- */
-#ifndef __JPG_API_H__
-#define __JPG_API_H__
-
-#include <stdint.h>
-#include <sys/ioctl.h>
-
-#include "Exif.h"
-
-namespace android {
-#define MAX_JPG_WIDTH 800
-#define MAX_JPG_HEIGHT 480
-#define MAX_JPG_RESOLUTION (MAX_JPG_WIDTH * MAX_JPG_HEIGHT)
-
-#define MAX_JPG_THUMBNAIL_WIDTH 320
-#define MAX_JPG_THUMBNAIL_HEIGHT 240
-#define MAX_JPG_THUMBNAIL_RESOLUTION (MAX_JPG_THUMBNAIL_WIDTH * \
- MAX_JPG_THUMBNAIL_HEIGHT)
-
-#define MAX_RGB_WIDTH 800
-#define MAX_RGB_HEIGHT 480
-#define MAX_RGB_RESOLUTION (MAX_RGB_WIDTH * MAX_RGB_HEIGHT)
-
-/*******************************************************************************/
-/* define JPG & image memory */
-/* memory area is 4k(PAGE_SIZE) aligned because of VirtualCopyEx() */
-#define JPG_STREAM_BUF_SIZE \
- (MAX_JPG_RESOLUTION / PAGE_SIZE + 1) * PAGE_SIZE
-#define JPG_STREAM_THUMB_BUF_SIZE \
- (MAX_JPG_THUMBNAIL_RESOLUTION / PAGE_SIZE + 1) * PAGE_SIZE
-#define JPG_FRAME_BUF_SIZE \
- ((MAX_JPG_RESOLUTION * 3) / PAGE_SIZE + 1) * PAGE_SIZE
-#define JPG_FRAME_THUMB_BUF_SIZE \
- ((MAX_JPG_THUMBNAIL_RESOLUTION * 3) / PAGE_SIZE + 1) * PAGE_SIZE
-#define JPG_RGB_BUF_SIZE \
- ((MAX_RGB_RESOLUTION * 4) / PAGE_SIZE + 1) * PAGE_SIZE
-
-#define JPG_TOTAL_BUF_SIZE (JPG_STREAM_BUF_SIZE + \
- JPG_STREAM_THUMB_BUF_SIZE + \
- JPG_FRAME_BUF_SIZE + \
- JPG_FRAME_THUMB_BUF_SIZE + \
- JPG_RGB_BUF_SIZE)
-
-#define JPG_MAIN_START 0x00
-#define JPG_THUMB_START JPG_STREAM_BUF_SIZE
-#define IMG_MAIN_START (JPG_STREAM_BUF_SIZE + JPG_STREAM_THUMB_BUF_SIZE)
-#define IMG_THUMB_START (IMG_MAIN_START + JPG_FRAME_BUF_SIZE)
-/*******************************************************************************/
-
-#define JPG_DRIVER_NAME "/dev/s3c-jpg"
-
-#define JPEG_IOCTL_MAGIC 'J'
-#define IOCTL_JPG_DECODE _IO(JPEG_IOCTL_MAGIC, 1)
-#define IOCTL_JPG_ENCODE _IO(JPEG_IOCTL_MAGIC, 2)
-#define IOCTL_JPG_GET_STRBUF _IO(JPEG_IOCTL_MAGIC, 3)
-#define IOCTL_JPG_GET_FRMBUF _IO(JPEG_IOCTL_MAGIC, 4)
-#define IOCTL_JPG_GET_THUMB_STRBUF _IO(JPEG_IOCTL_MAGIC, 5)
-#define IOCTL_JPG_GET_THUMB_FRMBUF _IO(JPEG_IOCTL_MAGIC, 6)
-#define IOCTL_JPG_GET_PHY_FRMBUF _IO(JPEG_IOCTL_MAGIC, 7)
-#define IOCTL_JPG_GET_PHY_THUMB_FRMBUF _IO(JPEG_IOCTL_MAGIC, 8)
-
-typedef enum {
- JPEG_SET_ENCODE_WIDTH,
- JPEG_SET_ENCODE_HEIGHT,
- JPEG_SET_ENCODE_QUALITY,
- JPEG_SET_ENCODE_IN_FORMAT,
- JPEG_SET_SAMPING_MODE,
- JPEG_SET_THUMBNAIL_WIDTH,
- JPEG_SET_THUMBNAIL_HEIGHT
-} jpeg_conf;
-
-typedef enum {
- JPG_FAIL,
- JPG_SUCCESS,
- OK_HD_PARSING,
- ERR_HD_PARSING,
- OK_ENC_OR_DEC,
- ERR_ENC_OR_DEC,
- ERR_UNKNOWN
-} jpg_return_status;
-
-typedef enum {
- JPG_RGB16,
- JPG_YCBYCR,
- JPG_TYPE_UNKNOWN
-} image_type_t;
-
-typedef enum {
- JPG_444,
- JPG_422,
- JPG_420,
- JPG_400,
- RESERVED1,
- RESERVED2,
- JPG_411,
- JPG_SAMPLE_UNKNOWN
-} sample_mode_t;
-
-typedef enum {
- YCBCR_422,
- YCBCR_420,
- YCBCR_SAMPLE_UNKNOWN
-} out_mode_t;
-
-typedef enum {
- JPG_MODESEL_YCBCR = 1,
- JPG_MODESEL_RGB,
- JPG_MODESEL_UNKNOWN
-} in_mode_t;
-
-typedef enum {
- JPG_MAIN,
- JPG_THUMBNAIL
-} encode_type_t;
-
-typedef enum {
- JPG_QUALITY_LEVEL_1, /* high */
- JPG_QUALITY_LEVEL_2,
- JPG_QUALITY_LEVEL_3,
- JPG_QUALITY_LEVEL_4 /* low */
-} image_quality_type_t;
-
-typedef struct {
- sample_mode_t sample_mode;
- encode_type_t dec_type;
- out_mode_t out_format;
- uint32_t width;
- uint32_t height;
- uint32_t data_size;
- uint32_t file_size;
-} jpg_dec_proc_param;
-
-typedef struct {
- sample_mode_t sample_mode;
- encode_type_t enc_type;
- in_mode_t in_format;
- image_quality_type_t quality;
- uint32_t width;
- uint32_t height;
- uint32_t data_size;
- uint32_t file_size;
- uint32_t set_framebuf;
-} jpg_enc_proc_param;
-
-typedef struct {
- char *in_buf;
- char *phy_in_buf;
- int in_buf_size;
- char *out_buf;
- char *phy_out_buf;
- int out_buf_size;
- char *in_thumb_buf;
- char *phy_in_thumb_buf;
- int in_thumb_buf_size;
- char *out_thumb_buf;
- char *phy_out_thumb_buf;
- int out_thumb_buf_size;
- char *mmapped_addr;
- jpg_dec_proc_param *dec_param;
- jpg_enc_proc_param *enc_param;
- jpg_enc_proc_param *thumb_enc_param;
-} jpg_args;
-
-class JpegEncoder {
-public:
- JpegEncoder();
- virtual ~JpegEncoder();
-
- int openHardware();
- jpg_return_status setConfig(jpeg_conf type, int32_t value);
- void *getInBuf(uint64_t size);
- void *getOutBuf(uint64_t *size);
- void *getThumbInBuf(uint64_t size);
- void *getThumbOutBuf(uint64_t *size);
- jpg_return_status encode(unsigned int *size, exif_attribute_t *exifInfo);
- jpg_return_status encodeThumbImg(unsigned int *size, bool useMain = true);
- jpg_return_status makeExif(unsigned char *exifOut,
- exif_attribute_t *exifIn,
- unsigned int *size,
- bool useMainbufForThumb = false);
-
-private:
- jpg_return_status checkMcu(sample_mode_t sampleMode, uint32_t width, uint32_t height, bool isThumb);
- bool pad(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
- char *dstBuf, uint32_t dstWidth, uint32_t dstHight);
- bool scaleDownYuv422(char *srcBuf, uint32_t srcWidth, uint32_t srcHight,
- char *dstBuf, uint32_t dstWidth, uint32_t dstHight);
-
- inline void writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- uint32_t value);
- inline void writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- unsigned char *pValue);
- inline void writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- rational_t *pValue,
- unsigned int *offset,
- unsigned char *start);
- inline void writeExifIfd(unsigned char **pCur,
- unsigned short tag,
- unsigned short type,
- unsigned int count,
- unsigned char *pValue,
- unsigned int *offset,
- unsigned char *start);
- int mDevFd;
- jpg_args mArgs;
-
- bool available;
-
-};
-};
-#endif /* __JPG_API_H__ */
diff --git a/libstagefrighthw/Android.mk b/libstagefrighthw/Android.mk
deleted file mode 100644
index 7716541..0000000
--- a/libstagefrighthw/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- stagefright_overlay_output.cpp \
- SecHardwareRenderer.cpp \
- SEC_OMX_Plugin.cpp
-
-LOCAL_CFLAGS += $(PV_CFLAGS_MINUS_VISIBILITY)
-
-LOCAL_C_INCLUDES:= \
- $(TOP)/frameworks/base/include/media/stagefright/openmax \
- $(LOCAL_PATH)/../include \
- $(LOCAL_PATH)/../liboverlay
-
-LOCAL_SHARED_LIBRARIES := \
- libbinder \
- libutils \
- libcutils \
- libui \
- libdl \
- libsurfaceflinger_client
-
-LOCAL_MODULE := libstagefrighthw
-
-LOCAL_MODULE_TAGS := optional
-include $(BUILD_SHARED_LIBRARY)
diff --git a/libstagefrighthw/SEC_OMX_Plugin.cpp b/libstagefrighthw/SEC_OMX_Plugin.cpp
deleted file mode 100644
index 0bb70c5..0000000
--- a/libstagefrighthw/SEC_OMX_Plugin.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SEC_OMX_Plugin.h"
-
-#include <dlfcn.h>
-
-#include <media/stagefright/HardwareAPI.h>
-#include <media/stagefright/MediaDebug.h>
-
-namespace android {
-
-OMXPluginBase *createOMXPlugin() {
- return new SECOMXPlugin;
-}
-
-SECOMXPlugin::SECOMXPlugin()
- : mLibHandle(dlopen("libSEC_OMX_Core.aries.so", RTLD_NOW)),
- mInit(NULL),
- mDeinit(NULL),
- mComponentNameEnum(NULL),
- mGetHandle(NULL),
- mFreeHandle(NULL),
- mGetRolesOfComponentHandle(NULL) {
- if (mLibHandle != NULL) {
- mInit = (InitFunc)dlsym(mLibHandle, "SEC_OMX_Init");
- mDeinit = (DeinitFunc)dlsym(mLibHandle, "SEC_OMX_DeInit");
-
- mComponentNameEnum =
- (ComponentNameEnumFunc)dlsym(mLibHandle, "SEC_OMX_ComponentNameEnum");
-
- mGetHandle = (GetHandleFunc)dlsym(mLibHandle, "SEC_OMX_GetHandle");
- mFreeHandle = (FreeHandleFunc)dlsym(mLibHandle, "SEC_OMX_FreeHandle");
-
- mGetRolesOfComponentHandle =
- (GetRolesOfComponentFunc)dlsym(
- mLibHandle, "SEC_OMX_GetRolesOfComponent");
-
- (*mInit)();
-
- }
-}
-
-SECOMXPlugin::~SECOMXPlugin() {
- if (mLibHandle != NULL) {
- (*mDeinit)();
-
- dlclose(mLibHandle);
- mLibHandle = NULL;
- }
-}
-
-OMX_ERRORTYPE SECOMXPlugin::makeComponentInstance(
- const char *name,
- const OMX_CALLBACKTYPE *callbacks,
- OMX_PTR appData,
- OMX_COMPONENTTYPE **component) {
- if (mLibHandle == NULL) {
- return OMX_ErrorUndefined;
- }
-
- return (*mGetHandle)(
- reinterpret_cast<OMX_HANDLETYPE *>(component),
- const_cast<char *>(name),
- appData, const_cast<OMX_CALLBACKTYPE *>(callbacks));
-}
-
-OMX_ERRORTYPE SECOMXPlugin::destroyComponentInstance(
- OMX_COMPONENTTYPE *component) {
- if (mLibHandle == NULL) {
- return OMX_ErrorUndefined;
- }
-
- return (*mFreeHandle)(reinterpret_cast<OMX_HANDLETYPE *>(component));
-}
-
-OMX_ERRORTYPE SECOMXPlugin::enumerateComponents(
- OMX_STRING name,
- size_t size,
- OMX_U32 index) {
- if (mLibHandle == NULL) {
- return OMX_ErrorUndefined;
- }
-
- return (*mComponentNameEnum)(name, size, index);
-}
-
-OMX_ERRORTYPE SECOMXPlugin::getRolesOfComponent(
- const char *name,
- Vector<String8> *roles) {
- roles->clear();
-
- if (mLibHandle == NULL) {
- return OMX_ErrorUndefined;
- }
-
- OMX_U32 numRoles;
- OMX_ERRORTYPE err = (*mGetRolesOfComponentHandle)(
- const_cast<OMX_STRING>(name), &numRoles, NULL);
-
- if (err != OMX_ErrorNone) {
- return err;
- }
-
- if (numRoles > 0) {
- OMX_U8 **array = new OMX_U8 *[numRoles];
- for (OMX_U32 i = 0; i < numRoles; ++i) {
- array[i] = new OMX_U8[OMX_MAX_STRINGNAME_SIZE];
- }
-
- OMX_U32 numRoles2;
- err = (*mGetRolesOfComponentHandle)(
- const_cast<OMX_STRING>(name), &numRoles2, array);
-
- CHECK_EQ(err, OMX_ErrorNone);
- CHECK_EQ(numRoles, numRoles2);
-
- for (OMX_U32 i = 0; i < numRoles; ++i) {
- String8 s((const char *)array[i]);
- roles->push(s);
-
- delete[] array[i];
- array[i] = NULL;
- }
-
- delete[] array;
- array = NULL;
- }
-
- return OMX_ErrorNone;
-}
-
-} // namespace android
-
diff --git a/libstagefrighthw/SEC_OMX_Plugin.h b/libstagefrighthw/SEC_OMX_Plugin.h
deleted file mode 100644
index 6df2d31..0000000
--- a/libstagefrighthw/SEC_OMX_Plugin.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SEC_OMX_PLUGIN
-
-#define SEC_OMX_PLUGIN
-
-#include <media/stagefright/OMXPluginBase.h>
-
-namespace android {
-
-struct SECOMXPlugin : public OMXPluginBase {
- SECOMXPlugin();
- virtual ~SECOMXPlugin();
-
- virtual OMX_ERRORTYPE makeComponentInstance(
- const char *name,
- const OMX_CALLBACKTYPE *callbacks,
- OMX_PTR appData,
- OMX_COMPONENTTYPE **component);
-
- virtual OMX_ERRORTYPE destroyComponentInstance(
- OMX_COMPONENTTYPE *component);
-
- virtual OMX_ERRORTYPE enumerateComponents(
- OMX_STRING name,
- size_t size,
- OMX_U32 index);
-
- virtual OMX_ERRORTYPE getRolesOfComponent(
- const char *name,
- Vector<String8> *roles);
-
-private:
- void *mLibHandle;
-
- typedef OMX_ERRORTYPE (*InitFunc)();
- typedef OMX_ERRORTYPE (*DeinitFunc)();
- typedef OMX_ERRORTYPE (*ComponentNameEnumFunc)(
- OMX_STRING, OMX_U32, OMX_U32);
-
- typedef OMX_ERRORTYPE (*GetHandleFunc)(
- OMX_HANDLETYPE *, OMX_STRING, OMX_PTR, OMX_CALLBACKTYPE *);
-
- typedef OMX_ERRORTYPE (*FreeHandleFunc)(OMX_HANDLETYPE *);
-
- typedef OMX_ERRORTYPE (*GetRolesOfComponentFunc)(
- OMX_STRING, OMX_U32 *, OMX_U8 **);
-
- InitFunc mInit;
- DeinitFunc mDeinit;
- ComponentNameEnumFunc mComponentNameEnum;
- GetHandleFunc mGetHandle;
- FreeHandleFunc mFreeHandle;
- GetRolesOfComponentFunc mGetRolesOfComponentHandle;
-
- SECOMXPlugin(const SECOMXPlugin &);
- SECOMXPlugin &operator=(const SECOMXPlugin &);
-};
-
-} // namespace android
-
-#endif // SEC_OMX_PLUGIN
diff --git a/libstagefrighthw/SecHardwareRenderer.cpp b/libstagefrighthw/SecHardwareRenderer.cpp
deleted file mode 100644
index cb9e8e8..0000000
--- a/libstagefrighthw/SecHardwareRenderer.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "SecHardwareRenderer"
-#define LOG_NDEBUG 0
-#include <utils/Log.h>
-
-#include "SecHardwareRenderer.h"
-
-#include <media/stagefright/MediaDebug.h>
-#include <surfaceflinger/ISurface.h>
-#include <ui/Overlay.h>
-
-#include <hardware/hardware.h>
-
-#include "v4l2_utils.h"
-#include "utils/Timers.h"
-
-#define CACHEABLE_BUFFERS 0x1
-
-#define USE_ZERO_COPY
-//#define SEC_DEBUG
-
-namespace android {
-
-////////////////////////////////////////////////////////////////////////////////
-
-SecHardwareRenderer::SecHardwareRenderer(
- const sp<ISurface> &surface,
- size_t displayWidth, size_t displayHeight,
- size_t decodedWidth, size_t decodedHeight,
- OMX_COLOR_FORMATTYPE colorFormat,
- int32_t rotationDegrees,
- bool fromHardwareDecoder)
- : mISurface(surface),
- mDisplayWidth(displayWidth),
- mDisplayHeight(displayHeight),
- mDecodedWidth(decodedWidth),
- mDecodedHeight(decodedHeight),
- mColorFormat(colorFormat),
- mInitCheck(NO_INIT),
- mFrameSize(mDecodedWidth * mDecodedHeight * 2),
- mIsFirstFrame(true),
- mCustomFormat(false),
- mIndex(0) {
-
- CHECK(mISurface.get() != NULL);
- CHECK(mDecodedWidth > 0);
- CHECK(mDecodedHeight > 0);
-
- if (colorFormat != OMX_COLOR_FormatCbYCrY
- && colorFormat != OMX_COLOR_FormatYUV420Planar
- && colorFormat != OMX_COLOR_FormatYUV420SemiPlanar) {
- LOGE("Invalid colorFormat (0x%x)", colorFormat);
- return;
- }
-
- uint32_t orientation;
- switch (rotationDegrees) {
- case 0: orientation = ISurface::BufferHeap::ROT_0; break;
- case 90: orientation = ISurface::BufferHeap::ROT_90; break;
- case 180: orientation = ISurface::BufferHeap::ROT_180; break;
- case 270: orientation = ISurface::BufferHeap::ROT_270; break;
- default: orientation = ISurface::BufferHeap::ROT_0; break;
- }
-
- sp<OverlayRef> ref;
-
-#if defined (USE_ZERO_COPY)
- if (fromHardwareDecoder) {
- ref = mISurface->createOverlay(
- mDecodedWidth, mDecodedHeight,
- HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP, orientation);
- mCustomFormat = true;
- }
-#else
- else
- {
- ref = mISurface->createOverlay(
- mDecodedWidth, mDecodedHeight, HAL_PIXEL_FORMAT_YCbCr_420_P,
- orientation);
- }
-#endif
-
- if (ref.get() == NULL) {
- LOGE("Unable to create the overlay!");
- return;
- }
-
- mOverlay = new Overlay(ref);
- mOverlay->setParameter(CACHEABLE_BUFFERS, 0);
-
- mNumBuf = mOverlay->getBufferCount();
-
- if (mCustomFormat) {
- mFrameSize = 32;
- mMemoryHeap = new MemoryHeapBase(mNumBuf * mFrameSize);
- } else {
- for (size_t i = 0; i < (size_t)mNumBuf; ++i) {
- void *addr = mOverlay->getBufferAddress((void *)i);
- mOverlayAddresses.push(addr);
- }
- }
-
- mInitCheck = OK;
-}
-
-SecHardwareRenderer::~SecHardwareRenderer() {
-
- if(mMemoryHeap != NULL)
- mMemoryHeap.clear();
-
- if (mOverlay.get() != NULL) {
- mOverlay->destroy();
- mOverlay.clear();
- }
-}
-
-void SecHardwareRenderer::handleYUV420Planar(
- const void *data, size_t size) {
-
- int FrameSize;
- uint8_t* pPhyYAddr;
- uint8_t* pPhyCAddr;
- int AddrSize;
- size_t offset;
-
- CHECK(size >= (mDecodedWidth * mDecodedHeight * 3) / 2);
-
- offset = mIndex * mFrameSize;
- void *dst = (uint8_t *)mMemoryHeap->getBase() + offset;
-
- AddrSize = sizeof(void *);
- memcpy(&FrameSize, data, sizeof(FrameSize));
- memcpy(&pPhyYAddr, data + sizeof(FrameSize), sizeof(pPhyYAddr));
- memcpy(&pPhyCAddr, data + sizeof(FrameSize) + (AddrSize * 1), sizeof(pPhyCAddr));
-
- memcpy(dst , &pPhyYAddr, sizeof(pPhyYAddr));
- memcpy(dst + sizeof(pPhyYAddr) , &pPhyCAddr, sizeof(pPhyCAddr));
- memcpy(dst + sizeof(pPhyYAddr) + sizeof(pPhyCAddr), &mIndex, sizeof(mIndex));
-}
-
-void SecHardwareRenderer::render(
- const void *data, size_t size, void *platformPrivate) {
-
- if (mOverlay.get() == NULL) {
- return;
- }
-
- if (mCustomFormat) {
- /* zero copy solution case */
-
- overlay_buffer_t dst = (uint8_t *)mMemoryHeap->getBase() + mIndex*mFrameSize;
-
- if (mColorFormat == OMX_COLOR_FormatYUV420Planar ||
- mColorFormat == OMX_COLOR_FormatYUV420SemiPlanar) {
- handleYUV420Planar(data, size);
- }
-
- if (mOverlay->queueBuffer(dst) == ALL_BUFFERS_FLUSHED) {
- mIsFirstFrame = true;
- if (mOverlay->queueBuffer((void *)dst) != 0) {
- return;
- }
- }
-
- if (++mIndex == mNumBuf) {
- mIndex = 0;
- }
-
- overlay_buffer_t overlay_buffer;
- if (!mIsFirstFrame) {
- status_t err = mOverlay->dequeueBuffer(&overlay_buffer);
- if (err == ALL_BUFFERS_FLUSHED) {
- mIsFirstFrame = true;
- } else {
- return;
- }
- } else {
- mIsFirstFrame = false;
- }
- } else {
- /* normal frame case */
- if (mColorFormat == OMX_COLOR_FormatYUV420Planar) {
- memcpy(mOverlayAddresses[mIndex], data, size);
- }
-
- if (mOverlay->queueBuffer((void *)mIndex) == ALL_BUFFERS_FLUSHED) {
- mIsFirstFrame = true;
- if (mOverlay->queueBuffer((void *)mIndex) != 0) {
- return;
- }
- }
-
- if (++mIndex == mNumBuf) {
- mIndex = 0;
- }
-
- overlay_buffer_t overlay_buffer;
- if (!mIsFirstFrame) {
- status_t err = mOverlay->dequeueBuffer(&overlay_buffer);
-
- if (err == ALL_BUFFERS_FLUSHED) {
- mIsFirstFrame = true;
- } else {
- return;
- }
- } else {
- mIsFirstFrame = false;
- }
- }
-}
-
-} // namespace android
-
diff --git a/libstagefrighthw/SecHardwareRenderer.h b/libstagefrighthw/SecHardwareRenderer.h
deleted file mode 100644
index 3fad243..0000000
--- a/libstagefrighthw/SecHardwareRenderer.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SEC_HARDWARE_RENDERER_H_
-
-#define SEC_HARDWARE_RENDERER_H_
-
-#include <media/stagefright/VideoRenderer.h>
-#include <utils/RefBase.h>
-#include <utils/Vector.h>
-
-#include <OMX_Component.h>
-
-#include <binder/MemoryHeapBase.h>
-#include <binder/MemoryHeapPmem.h>
-
-namespace android {
-
-class ISurface;
-class Overlay;
-
-class SecHardwareRenderer : public VideoRenderer {
-public:
- SecHardwareRenderer(
- const sp<ISurface> &surface,
- size_t displayWidth, size_t displayHeight,
- size_t decodedWidth, size_t decodedHeight,
- OMX_COLOR_FORMATTYPE colorFormat,
- int32_t rotationDegrees,
- bool fromHardwareDecoder);
-
- virtual ~SecHardwareRenderer();
-
- status_t initCheck() const { return mInitCheck; }
-
- virtual void render(
- const void *data, size_t size, void *platformPrivate);
-
-
-private:
- sp<ISurface> mISurface;
- size_t mDisplayWidth, mDisplayHeight;
- size_t mDecodedWidth, mDecodedHeight;
- OMX_COLOR_FORMATTYPE mColorFormat;
- status_t mInitCheck;
- size_t mFrameSize;
- sp<Overlay> mOverlay;
- sp<MemoryHeapBase> mMemoryHeap;
- Vector<void *> mOverlayAddresses;
- bool mIsFirstFrame;
- int mNumBuf;
- size_t mIndex;
- bool mCustomFormat;
-
-
- SecHardwareRenderer(const SecHardwareRenderer &);
- SecHardwareRenderer &operator=(const SecHardwareRenderer &);
-
- void handleYUV420Planar(const void *, size_t);
-};
-
-} // namespace android
-
-#endif // SEC_HARDWARE_RENDERER_H_
-
diff --git a/libstagefrighthw/stagefright_overlay_output.cpp b/libstagefrighthw/stagefright_overlay_output.cpp
deleted file mode 100644
index fce1d7e..0000000
--- a/libstagefrighthw/stagefright_overlay_output.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SecHardwareRenderer.h"
-
-#include <media/stagefright/HardwareAPI.h>
-
-using android::sp;
-using android::ISurface;
-using android::VideoRenderer;
-
-VideoRenderer *createRendererWithRotation(
- const sp<ISurface> &surface,
- const char *componentName,
- OMX_COLOR_FORMATTYPE colorFormat,
- size_t displayWidth, size_t displayHeight,
- size_t decodedWidth, size_t decodedHeight,
- int32_t rotationDegrees) {
- using android::SecHardwareRenderer;
-
- bool fromHardwareDecoder = !strncmp(componentName, "OMX.SEC.", 8);
-
- SecHardwareRenderer *renderer =
- new SecHardwareRenderer(
- surface, displayWidth, displayHeight,
- decodedWidth, decodedHeight,
- colorFormat,
- rotationDegrees,
- fromHardwareDecoder);
-
- if (renderer->initCheck() != android::OK) {
- delete renderer;
- renderer = NULL;
- }
-
- return renderer;
-}
-
diff --git a/overlay/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.jpg b/overlay/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.jpg
deleted file mode 100644
index 811149b..0000000
--- a/overlay/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/frameworks/base/core/res/res/values-de/arrays.xml b/overlay/frameworks/base/core/res/res/values-de/arrays.xml
deleted file mode 100644
index 7f97684..0000000
--- a/overlay/frameworks/base/core/res/res/values-de/arrays.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- Defines the shutdown options shown in the reboot dialog. -->
-<resources>
- <array name="shutdown_reboot_options">
- <item>Neu starten</item>
- <item>Recovery</item>
- </array>
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-fi-rFI/arrays.xml b/overlay/frameworks/base/core/res/res/values-fi-rFI/arrays.xml
deleted file mode 100644
index 00eb6cb..0000000
--- a/overlay/frameworks/base/core/res/res/values-fi-rFI/arrays.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, Google Inc.
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- Defines the shutdown options shown in the reboot dialog. -->
- <array name="shutdown_reboot_options">
- <item>Käynnistä uudelleen</item>
- <item>Recovery</item>
- </array>
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-fr/arrays.xml b/overlay/frameworks/base/core/res/res/values-fr/arrays.xml
deleted file mode 100644
index 69eeb7a..0000000
--- a/overlay/frameworks/base/core/res/res/values-fr/arrays.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
- <!-- Defines the shutdown options shown in the reboot dialog. -->
- <array name="shutdown_reboot_options">
- <item>Redémarrage</item>
- <item>Recovery</item>
- </array>
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-it/arrays.xml b/overlay/frameworks/base/core/res/res/values-it/arrays.xml
deleted file mode 100644
index 3984c9a..0000000
--- a/overlay/frameworks/base/core/res/res/values-it/arrays.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-
-
- <!-- Defines the shutdown options shown in the reboot dialog. -->
- <array name="shutdown_reboot_options">
- <item>Riavvia</item>
- <item>Recovery</item>
- </array>
-
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-pt-rBR/arrays.xml b/overlay/frameworks/base/core/res/res/values-pt-rBR/arrays.xml
deleted file mode 100755
index 7cde789..0000000
--- a/overlay/frameworks/base/core/res/res/values-pt-rBR/arrays.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, Google Inc.
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
-
- <!-- Do not translate. -->
- <integer-array name="maps_starting_lat_lng">
- <item>-22863878</item>
- <item>-43244097</item>
- </integer-array>
- <!-- Do not translate. -->
- <integer-array name="maps_starting_zoom">
- <item>3</item>
- </integer-array>
-
- <array name="shutdown_reboot_options">
- <item>Reiniciar</item>
- <item>Recuperação</item>
- </array>
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-ru/arrays.xml b/overlay/frameworks/base/core/res/res/values-ru/arrays.xml
deleted file mode 100644
index 88a5b21..0000000
--- a/overlay/frameworks/base/core/res/res/values-ru/arrays.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <array name="shutdown_reboot_options">
- <item>Перезагрузить</item>
- <item>Recovery</item>
- </array>
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-sv/arrays.xml b/overlay/frameworks/base/core/res/res/values-sv/arrays.xml
deleted file mode 100644
index d5adb37..0000000
--- a/overlay/frameworks/base/core/res/res/values-sv/arrays.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- Defines the shutdown options shown in the reboot dialog. -->
- <array name="shutdown_reboot_options">
- <item>Omstart</item>
- <item>Recovery</item>
- </array>
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-uk/arrays.xml b/overlay/frameworks/base/core/res/res/values-uk/arrays.xml
deleted file mode 100644
index 9b0081d..0000000
--- a/overlay/frameworks/base/core/res/res/values-uk/arrays.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <array name="shutdown_reboot_options">
- <item>Перезавантажити</item>
- <item>Реж. відновлення</item>
- </array>
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values-zh-rTW/arrays.xml b/overlay/frameworks/base/core/res/res/values-zh-rTW/arrays.xml
deleted file mode 100644
index fca8906..0000000
--- a/overlay/frameworks/base/core/res/res/values-zh-rTW/arrays.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, Google Inc.
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
-
- <!-- Do not translate. -->
- <integer-array name="maps_starting_lat_lng">
- <item>25022112</item>
- <item>121478019</item>
- </integer-array>
- <!-- Do not translate. -->
- <integer-array name="maps_starting_zoom">
- <item>3</item>
- </integer-array>
-
-
- <!-- Defines the shutdown options shown in the reboot dialog. -->
- <array name="shutdown_reboot_options">
- <item>重新開機</item>
- <item>Recovery</item>
- </array>
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values/arrays.xml b/overlay/frameworks/base/core/res/res/values/arrays.xml
deleted file mode 100644
index 3b32312..0000000
--- a/overlay/frameworks/base/core/res/res/values/arrays.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/assets/res/any/colors.xml
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- Do not translate. These are all of the drawable resources that should be preloaded by
- the zygote process before it starts forking application processes. -->
- <array name="preloaded_drawables">
- <item>@drawable/sym_def_app_icon</item>
- <item>@drawable/arrow_down_float</item>
- <item>@drawable/btn_check</item>
- <item>@drawable/btn_check_label_background</item>
- <item>@drawable/btn_check_off</item>
- <item>@drawable/btn_check_on</item>
- <item>@drawable/btn_default</item>
- <item>@drawable/btn_default_small</item>
- <item>@drawable/btn_dropdown</item>
- <item>@drawable/btn_plus</item>
- <item>@drawable/btn_minus</item>
- <item>@drawable/btn_radio</item>
- <item>@drawable/btn_star</item>
- <item>@drawable/btn_toggle</item>
- <item>@drawable/ic_emergency</item>
- <item>@drawable/divider_horizontal_bright</item>
- <item>@drawable/divider_horizontal_dark</item>
- <item>@drawable/edit_text</item>
- <item>@drawable/expander_group</item>
- <item>@drawable/list_selector_background</item>
- <item>@drawable/menu_background</item>
- <item>@drawable/menu_background_fill_parent_width</item>
- <item>@drawable/menu_selector</item>
- <item>@drawable/panel_background</item>
- <item>@drawable/popup_bottom_bright</item>
- <item>@drawable/popup_bottom_dark</item>
- <item>@drawable/popup_bottom_medium</item>
- <item>@drawable/popup_center_bright</item>
- <item>@drawable/popup_center_dark</item>
- <item>@drawable/popup_full_dark</item>
- <item>@drawable/popup_top_bright</item>
- <item>@drawable/popup_top_dark</item>
- <item>@drawable/progress_horizontal</item>
- <item>@drawable/progress_indeterminate_horizontal</item>
- <item>@drawable/progress_small</item>
- <item>@drawable/progress_small_titlebar</item>
- <item>@drawable/screen_background_dark</item>
- <item>@drawable/screen_background_light</item>
- <item>@drawable/scrollbar_handle_horizontal</item>
- <item>@drawable/scrollbar_handle_vertical</item>
- <item>@drawable/spinner_dropdown_background</item>
- <item>@drawable/text_select_handle_left</item>
- <item>@drawable/text_select_handle_middle</item>
- <item>@drawable/text_select_handle_right</item>
- <item>@drawable/title_bar</item>
- <item>@drawable/title_bar_shadow</item>
- <!-- Visual lock screen -->
- <item>@drawable/indicator_code_lock_drag_direction_green_up</item>
- <item>@drawable/indicator_code_lock_drag_direction_red_up</item>
- <item>@drawable/indicator_code_lock_point_area_default</item>
- <item>@drawable/indicator_code_lock_point_area_green</item>
- <item>@drawable/indicator_code_lock_point_area_red</item>
- <!-- overscroll -->
- <item>@drawable/overscroll_glow</item>
- <item>@drawable/overscroll_edge</item>
- </array>
-
- <!-- Do not translate. These are all of the color state list resources that should be
- preloaded by the zygote process before it starts forking application processes. -->
- <array name="preloaded_color_state_lists">
- <item>@color/hint_foreground_dark</item>
- <item>@color/hint_foreground_light</item>
- <item>@color/primary_text_dark</item>
- <item>@color/primary_text_dark_disable_only</item>
- <item>@color/primary_text_light</item>
- <item>@color/primary_text_light_disable_only</item>
- <item>@color/primary_text_light_nodisable</item>
- <item>@color/secondary_text_dark</item>
- <item>@color/secondary_text_light</item>
- <item>@color/tab_indicator_text</item>
- <item>@color/tertiary_text_dark</item>
- <item>@color/tertiary_text_light</item>
- <item>#ff000000</item>
- <item>#00000000</item>
- <item>#ffffffff</item>
- </array>
-
- <!-- Do not translate. -->
- <integer-array name="maps_starting_lat_lng">
- <item>36149777</item>
- <item>-95993398</item>
- </integer-array>
- <!-- Do not translate. -->
- <integer-array name="maps_starting_zoom">
- <item>3</item>
- </integer-array>
-
- <!-- Defines the shutdown options shown in the reboot dialog. -->
- <array name="shutdown_reboot_options">
- <item>Reboot</item>
- <item>Recovery</item>
- </array>
-
- <!-- Do not translate. Defines the shutdown actions passed to the kernel.
- The first item should be empty for regular reboot. -->
- <string-array name="shutdown_reboot_actions">
- <item></item>
- <item>recovery</item>
- </string-array>
-
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
deleted file mode 100644
index 6336d69..0000000
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources>
- <!-- Flag indicating whether we should enable the automatic brightness in Settings.
- config_hardware_automatic_brightness_available is not set, so we will use software implementation -->
- <bool name="config_automatic_brightness_available">true</bool>
-
- <!-- There is no charging LED. -->
- <bool name="config_unplugTurnsOnScreen">true</bool>
-
- <!-- Our amoled doesn't animate well. -->
- <bool name="config_animateScreenLights">false</bool>
-
- <!-- disable menu hard key on Crespo in non-pattern lockscreen -->
- <bool name="config_disableMenuKeyInLockScreen">true</bool>
-
- <!-- Array of light sensor LUX values to define our levels for auto backlight brightness support.
- The N entries of this array define N + 1 zones as follows:
-
- Zone 0: 0 <= LUX < array[0]
- Zone 1: array[0] <= LUX < array[1]
- ...
- Zone N: array[N - 1] <= LUX < array[N]
- Zone N + 1: array[N] <= LUX < infinity
-
- Must be overridden in platform specific overlays -->
- <integer-array name="config_autoBrightnessLevels">
- <item>10</item>
- <item>160</item>
- <item>225</item>
- <item>320</item>
- <item>640</item>
- <item>1280</item>
- <item>2600</item>
- <item>10240</item>
- </integer-array>
-
- <!-- Array of output values for LCD backlight corresponding to the LUX values
- in the config_autoBrightnessLevels array. This array should have size one greater
- than the size of the config_autoBrightnessLevels array.
- -->
- <integer-array name="config_autoBrightnessLcdBacklightValues">
- <item>20</item>
- <item>20</item>
- <item>20</item>
- <item>20</item>
- <item>35</item>
- <item>50</item>
- <item>50</item>
- <item>100</item>
- <item>255</item>
- </integer-array>
-
- <!-- Array of output values for button backlight corresponding to the LUX values
- in the config_autoBrightnessLevels array. This array should have size one greater
- than the size of the config_autoBrightnessLevels array.
- -->
- <integer-array name="config_autoBrightnessButtonBacklightValues">
- <item>255</item>
- <item>255</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- </integer-array>
-
- <!-- Array of output values for keyboard backlight corresponding to the LUX values
- in the config_autoBrightnessLevels array. This array should have size one greater
- than the size of the config_autoBrightnessLevels array.
- Crespo has no keyboard so all values are zero.
- -->
- <integer-array name="config_autoBrightnessKeyboardBacklightValues">
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- <item>0</item>
- </integer-array>
-
- <!-- Component name of the default wallpaper. This will be ImageWallpaper if not
- specified -->
- <string name="default_wallpaper_component">com.android.wallpaper/.nexus.NexusWallpaper</string>
-
- <integer name="config_deskDockKeepsScreenOn">0</integer>
- <integer name="config_carDockKeepsScreenOn">1</integer>
-
- <!-- Default color for notification LED is white -->
- <color name="config_defaultNotificationColor">#ffffffff</color>
-
- <!-- Default blink frequency for notification LED is 9 seconds. -->
- <integer name="config_defaultNotificationLedOff">9000</integer>
-
- <!-- Component name of the service providing network location support. -->
- <string name="config_networkLocationProvider">com.google.android.location.NetworkLocationProvider</string>
-
- <!-- Component name of the service providing geocoder API support. -->
- <string name="config_geocodeProvider">com.google.android.location.GeocodeProvider</string>
-
-
- <!-- XXXXX NOTE THE FOLLOWING RESOURCES USE THE WRONG NAMING CONVENTION.
- Please don't copy them, copy anything else. -->
-
- <!-- This string array should be overridden by the device to present a list of network
- attributes. This is used by the connectivity manager to decide which networks can coexist
- based on the hardware -->
- <!-- An Array of "[Connection name],[ConnectivityManager connection type],
- [associated radio-type],[priority] -->
- <string-array translatable="false" name="networkAttributes">
- <item>"wifi,1,1,1"</item>
- <item>"mobile,0,0,0"</item>
- <item>"mobile_mms,2,0,2"</item>
- <item>"mobile_supl,3,0,2"</item>
- <item>"mobile_dun,4,0,4"</item>
- <item>"mobile_hipri,5,0,3"</item>
- </string-array>
-
- <!-- List of regexpressions describing the interface (if any) that represent tetherable
- USB interfaces. If the device doesn't want to support tething over USB this should
- be empty. An example would be "usb.*" -->
- <string-array translatable="false" name="config_tether_usb_regexs">
- <item>"usb0"</item>
- </string-array>
-
- <!-- Regex array of allowable upstream ifaces for tethering - for example if you want
- tethering on a new interface called "foo2" add <item>"foo\\d"</item> to the array -->
- <string-array translatable="false" name="config_tether_upstream_regexs">
- <item>"pdp\\d"</item>
- <item>"eth\\d"</item>
- </string-array>
-
- <!-- List of regexpressions describing the interface (if any) that represent tetherable
- Wifi interfaces. If the device doesn't want to support tethering over Wifi this
- should be empty. An example would be "softap.*" -->
- <string-array translatable="false" name="config_tether_wifi_regexs">
- <item>"wl0.1"</item>
- </string-array>
-
-
- <!-- Boolean indicating if we require the use of DUN on mobile for tethering -->
- <bool translatable="false" name="config_tether_dun_required">false</bool>
-
- <!-- Vibrator pattern for a very short but reliable vibration for soft keyboard tap -->
- <integer-array name="config_keyboardTapVibePattern">
- <item>30</item>
- </integer-array>
-
- <!-- Vibrator pattern for feedback about booting with safe mode disabled -->
- <integer-array name="config_safeModeDisabledVibePattern">
- <item>1</item>
- </integer-array>
-
- <!-- crespo doesn't handle this blur effect very quickly. -->
- <bool name="config_sf_slowBlur">true</bool>
-
-
- <!-- Boolean indicating if restoring network selection should be skipped -->
- <!-- The restoring is handled by modem if it is true -->
- <bool translatable="false" name="skip_restoring_network_selection">true</bool>
-</resources>
diff --git a/overlay/frameworks/base/core/res/res/xml/power_profile.xml b/overlay/frameworks/base/core/res/res/xml/power_profile.xml
deleted file mode 100644
index a00f060..0000000
--- a/overlay/frameworks/base/core/res/res/xml/power_profile.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<device name="Android">
- <item name="none">0</item>
- <item name="screen.on">49</item>
- <item name="bluetooth.active">142</item> <!-- In call -->
- <item name="bluetooth.on">0.3</item>
- <!-- CPU wakelock held for 830ms on bluetooth headset at command. 43mA * 830 -->
- <item name="bluetooth.at">35690</item>
- <item name="screen.full">260</item>
- <item name="wifi.on">4</item>
- <item name="wifi.active">120</item>
- <item name="wifi.scan">220</item>
- <item name="dsp.audio">88</item>
- <item name="dsp.video">88</item>
- <item name="radio.active">185</item>
- <item name="gps.on">50</item>
- <item name="battery.capacity">1500</item>
- <item name="radio.scanning">88</item>
- <array name="radio.on"> <!-- Strength 0 to BINS-1 -->
- <value>3.4</value>
- <value>3.4</value>
- </array>
- <array name="cpu.speeds">
- <value>100000</value>
- <value>200000</value>
- <value>400000</value>
- <value>800000</value>
- <value>1000000</value>
- </array>
- <!-- Power consumption in suspend -->
- <item name="cpu.idle">1.4</item>
- <!-- Power consumption due to wake lock held -->
- <item name="cpu.awake">44</item>
- <!-- Power consumption at different speeds -->
- <array name="cpu.active">
- <value>55.4</value>
- <value>82.1</value>
- <value>113.7</value>
- <value>205.4</value>
- <value>259.0</value>
- </array>
-</device>
diff --git a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
deleted file mode 100644
index a6af5fd..0000000
--- a/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<resources>
- <bool name="def_accelerometer_rotation">true</bool>
- <bool name="def_screen_brightness_automatic_mode">true</bool>
-</resources>
diff --git a/overlay/frameworks/base/tests/ImfTest/res/values/config.xml b/overlay/frameworks/base/tests/ImfTest/res/values/config.xml
deleted file mode 100644
index 157d04a..0000000
--- a/overlay/frameworks/base/tests/ImfTest/res/values/config.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-<resources>
- <bool name="def_expect_ime_autopop">true</bool>
-</resources>
diff --git a/overlay/packages/apps/CMParts/res/values/config.xml b/overlay/packages/apps/CMParts/res/values/config.xml
deleted file mode 100644
index 5818480..0000000
--- a/overlay/packages/apps/CMParts/res/values/config.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <!-- Whether or not to display the trackball settings -->
- <bool name="has_trackball">false</bool>
-
- <!-- Notification LED has single color only -->
- <bool name="has_single_notification_led">true</bool>
-</resources>
diff --git a/overlay/packages/apps/Camera/res/values/config.xml b/overlay/packages/apps/Camera/res/values/config.xml
deleted file mode 100644
index a1445c4..0000000
--- a/overlay/packages/apps/Camera/res/values/config.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2011, The CyanogenMod Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<resources>
- <!-- Autofocus parameters -->
- <string name="touchFocusParameter">touch-focus</string>
- <bool name="touchFocusNeedsRect">false</bool>
-</resources>
diff --git a/overlay/packages/apps/Contacts/res/values/config.xml b/overlay/packages/apps/Contacts/res/values/config.xml
deleted file mode 100644
index 6e48cd8..0000000
--- a/overlay/packages/apps/Contacts/res/values/config.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Crespo-specific Contacts app resources. -->
-<resources>
- <!-- Enable the onscreen "Dial" button in the dialer. -->
- <bool name="config_show_onscreen_dial_button">true</bool>
-</resources>
diff --git a/overlay/packages/apps/FM/res/values/config.xml b/overlay/packages/apps/FM/res/values/config.xml
deleted file mode 100644
index 4ee80db..0000000
--- a/overlay/packages/apps/FM/res/values/config.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Aries specific FM app config -->
-<resources>
- <!-- Whether or not Bluetooth must be enabled for FM radio -->
- <bool name="require_bt">false</bool>
-
- <!-- Whether or not seek is supported -->
- <bool name="seek_supported">true</bool>
-</resources>
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass.jpg
deleted file mode 100644
index 5518d6d..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass_small.jpg
deleted file mode 100644
index a1751e2..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpg
deleted file mode 100644
index 95c59ea..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains_small.jpg
deleted file mode 100644
index 956e8f0..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpg
deleted file mode 100644
index 4bc7ff3..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam_small.jpg
deleted file mode 100644
index f034b33..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpg
deleted file mode 100644
index 2f96d02..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse_small.jpg
deleted file mode 100644
index 34ca847..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpg
deleted file mode 100644
index f4a3934..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle_small.jpg
deleted file mode 100644
index d580182..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpg
deleted file mode 100644
index 8f3ec2d..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars_small.jpg
deleted file mode 100644
index ba76f18..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpg
deleted file mode 100644
index fdd4aaf..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream_small.jpg
deleted file mode 100644
index 432d67d..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights.jpg
deleted file mode 100644
index a8b6880..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights_small.jpg
deleted file mode 100644
index 11c253e..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpg
deleted file mode 100644
index 660040e..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset_small.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset_small.jpg
deleted file mode 100644
index ed79925..0000000
--- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset_small.jpg
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/apps/Launcher2/res/values-hdpi/wallpapers.xml b/overlay/packages/apps/Launcher2/res/values-hdpi/wallpapers.xml
deleted file mode 100644
index 40033cf..0000000
--- a/overlay/packages/apps/Launcher2/res/values-hdpi/wallpapers.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- -->
-
-<resources>
- <string-array name="wallpapers" translatable="false">
- <item>wallpaper_street_lights</item>
- <item>wallpaper_stream</item>
- <item>wallpaper_phasebeam</item>
- <item>wallpaper_pulse</item>
- <item>wallpaper_nexusrain</item>
- <item>wallpaper_stars</item>
- <item>wallpaper_canyon</item>
- <item>wallpaper_grass</item>
- <item>wallpaper_zanzibar</item>
- <item>wallpaper_cloud</item>
- <item>wallpaper_monumentvalley</item>
- <item>wallpaper_mountains</item>
- <item>wallpaper_sunset</item>
- <item>wallpaper_goldengate</item>
- <item>wallpaper_shuttle</item>
- </string-array>
-</resources>
diff --git a/overlay/packages/apps/Phone/res/values/config.xml b/overlay/packages/apps/Phone/res/values/config.xml
deleted file mode 100644
index 69d82c1..0000000
--- a/overlay/packages/apps/Phone/res/values/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Crespo-specific phone app resources. -->
-<resources>
-
- <!-- Enable the onscreen touch UI for all states of the in-call UI. -->
- <bool name="allow_incoming_call_touch_ui">true</bool>
- <bool name="allow_in_call_touch_ui">true</bool>
-
- <!-- This is a device with capacitive buttons, so disable the feature
- where BACK rejects the current incoming call. (Since it's so
- easy to press the key accidentally as you pull the phone out of
- your pocket.) -->
- <bool name="allow_back_key_to_reject_incoming_call">false</bool>
-
- <!-- Enable the onscreen "Dial" button in the emergency dialer. -->
- <bool name="config_show_onscreen_dial_button">true</bool>
-
- <!-- This device implements a noise suppression device for in call audio-->
- <bool name="has_in_call_noise_suppression">true</bool>
-
-</resources>
diff --git a/overlay/packages/apps/Settings/res/values/bools.xml b/overlay/packages/apps/Settings/res/values/bools.xml
deleted file mode 100644
index 83d1213..0000000
--- a/overlay/packages/apps/Settings/res/values/bools.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources>
- <!-- Whether or not there is a notification led that is too intrusive to be pulsing
- constantly -->
- <bool name="has_intrusive_led">false</bool>
- <!-- Whether or not the dock settings are to be displayed for this device when docked -->
- <bool name="has_dock_settings">true</bool>
-</resources>
diff --git a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/nexus_thumb.png b/overlay/packages/wallpapers/Basic/res/drawable-hdpi/nexus_thumb.png
deleted file mode 100644
index 84462e2..0000000
--- a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/nexus_thumb.png
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.png b/overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.png
deleted file mode 100644
index 2310a91..0000000
--- a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.png
+++ /dev/null
Binary files differ
diff --git a/overlay/packages/wallpapers/Basic/res/raw/nexus.rs b/overlay/packages/wallpapers/Basic/res/raw/nexus.rs
deleted file mode 100644
index df79689..0000000
--- a/overlay/packages/wallpapers/Basic/res/raw/nexus.rs
+++ /dev/null
@@ -1,313 +0,0 @@
-// Copyright (C) 2009 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma version(1)
-#pragma stateVertex(PVOrtho)
-#pragma stateStore(PSSolid)
-
-#define MAX_PULSES 20
-#define MAX_EXTRAS 40
-#define PULSE_SIZE 14 // Size in pixels of a cell
-#define HALF_PULSE_SIZE 7
-#define GLOW_SIZE 64 // Size of the leading glow in pixels
-#define HALF_GLOW_SIZE 32
-#define SPEED 0.2f // (200 / 1000) Pixels per ms
-#define SPEED_VARIANCE 0.3f
-#define PULSE_NORMAL 0
-#define PULSE_EXTRA 1
-#define TRAIL_SIZE 40 // Number of cells in a trail
-#define MAX_DELAY 2000 // Delay between a pulse going offscreen and restarting
-
-struct pulse_s {
- int pulseType;
- float originX;
- float originY;
- int color;
- int startTime;
- float dx;
- float dy;
- float scale;
- int active;
-};
-struct pulse_s gPulses[MAX_PULSES];
-
-struct pulse_s gExtras[MAX_EXTRAS];
-
-int gNow;
-
-
-void setColor(int c) {
- if (State->mode == 1) {
- // sholes red
- color(0.9f, 0.1f, 0.1f, 0.8f);
- } else if (c == 0) {
- // red
- color(1.0f, 0.0f, 0.0f, 0.8f);
- } else if (c == 1) {
- // green
- color(0.0f, 0.8f, 0.0f, 0.8f);
- } else if (c == 2) {
- // blue
- color(0.0f, 0.4f, 0.9f, 0.8f);
- } else if (c == 3) {
- // yellow
- color(1.0f, 0.8f, 0.0f, 0.8f);
- }
-}
-
-void initPulse(struct pulse_s * pulse, int pulseType) {
- float scale = randf2(0.7f, 1.7f);
- pulse->scale = scale;
- if (randf(1) > 0.5f) {
- pulse->originX = (int)randf(State->width * 2 / PULSE_SIZE) * PULSE_SIZE;
- pulse->dx = 0;
- if (randf(1) > 0.5f) {
- // Top
- pulse->originY = 0;
- pulse->dy = scale;
- } else {
- // Bottom
- pulse->originY = State->height / scale;
- pulse->dy = -scale;
- }
- } else {
- pulse->originY = (int)randf(State->height / PULSE_SIZE) * PULSE_SIZE;
- pulse->dy = 0;
- if (randf(1) > 0.5f) {
- // Left
- pulse->originX = 0;
- pulse->dx = scale;
- } else {
- // Right
- pulse->originX = State->width * 2 / scale;
- pulse->dx = -scale;
- }
- }
- pulse->startTime = gNow + (int)randf(MAX_DELAY);
-
- pulse->color = (int)randf(4.0f);
-
- pulse->pulseType = pulseType;
- if (pulseType == PULSE_EXTRA) {
- pulse->active = 0;
- } else {
- pulse->active = 1;
- }
-}
-
-void initPulses() {
- gNow = uptimeMillis();
- int i;
- for (i=0; i<MAX_PULSES; i++) {
- initPulse(&gPulses[i], PULSE_NORMAL);
- }
- for (i=0; i<MAX_EXTRAS; i++) {
- struct pulse_s * p = &gExtras[i];
- p->pulseType = PULSE_EXTRA;
- p->active = 0;
- }
-}
-
-void drawBackground(int width, int height) {
- bindProgramFragment(NAMED_PFTextureBG);
- bindTexture(NAMED_PFTextureBG, 0, NAMED_TBackground);
- color(1.0f, 1.0f, 1.0f, 1.0f);
- if (State->rotate) {
- drawRect(0.0f, 0.0f, height*2, width, 0.0f);
- } else {
- drawRect(0.0f, 0.0f, width*2, height, 0.0f);
- }
-}
-
-void drawPulses(struct pulse_s * pulseSet, int setSize) {
- bindProgramFragment(NAMED_PFTexture);
- bindProgramFragmentStore(NAMED_PSBlend);
-
- float matrix[16];
- float modelMatrix[16];
-
- int i;
- for (i=0; i<setSize; i++) {
- struct pulse_s * p = &pulseSet[i];
-
- int delta = gNow - p->startTime;
-
- if (p->active != 0 && delta >= 0) {
-
- matrixLoadIdentity(modelMatrix);
- if (State->rotate) {
- //matrixLoadRotate(modelMatrix, 90.0f, 0.0f, 0.0f, 1.0f);
- //matrixTranslate(modelMatrix, 0.0f, -height, 1.0f);
- // XXX: HAX: do not slide display in landscape
- } else {
- matrixTranslate(modelMatrix, -(State->xOffset * State->width), 0, 0);
- }
- matrixScale(modelMatrix, p->scale, p->scale, 1.0f);
- vpLoadModelMatrix(modelMatrix);
-
- float x = p->originX + (p->dx * SPEED * delta);
- float y = p->originY + (p->dy * SPEED * delta);
-
- matrixLoadIdentity(matrix);
- if (p->dx < 0) {
- vpLoadTextureMatrix(matrix);
- float xx = x + (TRAIL_SIZE * PULSE_SIZE);
- if (xx <= 0) {
- initPulse(p, p->pulseType);
- } else {
- setColor(p->color);
- bindTexture(NAMED_PFTexture, 0, NAMED_TPulse);
- drawRect(x, y, xx, y + PULSE_SIZE, 0.0f);
- bindTexture(NAMED_PFTexture, 0, NAMED_TGlow);
- drawRect(x + HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- y + HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- x + HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- y + HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- 0.0f);
- }
- } else if (p->dx > 0) {
- x += PULSE_SIZE; // need to start on the other side of this cell
- vpLoadTextureMatrix(matrix);
- float xx = x - (TRAIL_SIZE * PULSE_SIZE);
- if (xx >= State->width * 2) {
- initPulse(p, p->pulseType);
- } else {
- setColor(p->color);
- bindTexture(NAMED_PFTexture, 0, NAMED_TPulse);
- drawRect(x, y, xx, y + PULSE_SIZE, 0.0f);
- bindTexture(NAMED_PFTexture, 0, NAMED_TGlow);
- drawRect(x - HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- y + HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- x - HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- y + HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- 0.0f);
- }
- } else if (p->dy < 0) {
- vpLoadTextureMatrix(matrix);
- float yy = y + (TRAIL_SIZE * PULSE_SIZE);
- if (yy <= 0) {
- initPulse(p, p->pulseType);
- } else {
- setColor(p->color);
- bindTexture(NAMED_PFTexture, 0, NAMED_TPulseVert);
- drawRect(x, yy, x + PULSE_SIZE, y, 0.0f);
- bindTexture(NAMED_PFTexture, 0, NAMED_TGlow);
- drawRect(x + HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- y + HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- x + HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- y + HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- 0.0f);
- }
- } else if (p->dy > 0) {
- y += PULSE_SIZE; // need to start on the other side of this cell
- vpLoadTextureMatrix(matrix);
- float yy = y - (TRAIL_SIZE * PULSE_SIZE);
- if (yy >= State->height) {
- initPulse(p, p->pulseType);
- } else {
- setColor(p->color);
- bindTexture(NAMED_PFTexture, 0, NAMED_TPulseVert);
- drawRect(x, yy, x + PULSE_SIZE, y, 0.0f);
- bindTexture(NAMED_PFTexture, 0, NAMED_TGlow);
- drawRect(x + HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- y - HALF_PULSE_SIZE - HALF_GLOW_SIZE,
- x + HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- y - HALF_PULSE_SIZE + HALF_GLOW_SIZE,
- 0.0f);
- }
- }
- }
- }
-
-
- matrixLoadIdentity(matrix);
- vpLoadTextureMatrix(matrix);
-}
-
-void addTap(int x, int y) {
- int i;
- int count = 0;
- int color = (int)randf(4.0f);
- float scale = randf2(0.9f, 1.9f);
- x = (int)(x / PULSE_SIZE) * PULSE_SIZE;
- y = (int)(y / PULSE_SIZE) * PULSE_SIZE;
- for (i=0; i<MAX_EXTRAS; i++) {
- struct pulse_s * p = &gExtras[i];
- if (p->active == 0) {
- p->originX = x/scale;
- p->originY = y/scale;
- p->scale = scale;
-
- if (count == 0) {
- p->dx = scale;
- p->dy = 0.0f;
- } else if (count == 1) {
- p->dx = -scale;
- p->dy = 0.0f;
- } else if (count == 2) {
- p->dx = 0.0f;
- p->dy = scale;
- } else if (count == 3) {
- p->dx = 0.0f;
- p->dy = -scale;
- }
-
- p->active = 1;
- p->color = color;
- color++;
- if (color >= 4) {
- color = 0;
- }
- p->startTime = gNow;
- count++;
- if (count == 4) {
- break;
- }
- }
- }
-}
-
-int main(int index) {
-
- gNow = uptimeMillis();
-
- if (Command->command != 0) {
- //debugF("x", Command->x);
- //debugF("y", Command->y);
- Command->command = 0;
- addTap(Command->x, Command->y);
- }
-
- int width = State->width;
- int height = State->height;
-
- float matrix[16];
- matrixLoadIdentity(matrix);
- if (State->rotate) {
- //matrixLoadRotate(matrix, 90.0f, 0.0f, 0.0f, 1.0f);
- //matrixTranslate(matrix, 0.0f, -height, 1.0f);
- // XXX: HAX: do not slide display in landscape
- } else {
- matrixTranslate(matrix, -(State->xOffset * width), 0, 0);
- }
-
- vpLoadModelMatrix(matrix);
-
- drawBackground(width, height);
-
- drawPulses(gPulses, MAX_PULSES);
- drawPulses(gExtras, MAX_EXTRAS);
-
- return 45;
-}
diff --git a/overlay/packages/wallpapers/Basic/res/values/surfacemode.xml b/overlay/packages/wallpapers/Basic/res/values/surfacemode.xml
deleted file mode 100644
index 37774ed..0000000
--- a/overlay/packages/wallpapers/Basic/res/values/surfacemode.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <bool name="use_32bit">true</bool>
-</resources>
diff --git a/shbootimg.mk b/shbootimg.mk
index 5412568..c78cab3 100644
--- a/shbootimg.mk
+++ b/shbootimg.mk
@@ -1,7 +1,7 @@
LOCAL_PATH := $(call my-dir)
INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img
-$(INSTALLED_BOOTIMAGE_TARGET): $(TARGET_PREBUILT_KERNEL) $(recovery_ramdisk) $(INSTALLED_RAMDISK_TARGET) $(PRODUCT_OUT)/utilities/flash_image $(PRODUCT_OUT)/utilities/busybox $(PRODUCT_OUT)/utilities/make_ext4fs $(PRODUCT_OUT)/utilities/erase_image $(PRODUCT_OUT)/modem.bin
+$(INSTALLED_BOOTIMAGE_TARGET): $(TARGET_PREBUILT_KERNEL) $(recovery_ramdisk) $(INSTALLED_RAMDISK_TARGET) $(PRODUCT_OUT)/utilities/flash_image $(PRODUCT_OUT)/utilities/busybox $(PRODUCT_OUT)/utilities/erase_image $(PRODUCT_OUT)/modem.bin
$(call pretty,"Boot image: $@")
$(hide) ./device/samsung/aries-common/mkshbootimg.py $@ $(TARGET_PREBUILT_KERNEL) $(INSTALLED_RAMDISK_TARGET) $(recovery_ramdisk)