diff options
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 Binary files differdeleted file mode 100644 index 811149b..0000000 --- a/overlay/frameworks/base/core/res/res/drawable-hdpi/default_wallpaper.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index 5518d6d..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index a1751e2..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_grass_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpg Binary files differdeleted file mode 100644 index 95c59ea..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index 956e8f0..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_mountains_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpg Binary files differdeleted file mode 100644 index 4bc7ff3..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index f034b33..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_phasebeam_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpg Binary files differdeleted file mode 100644 index 2f96d02..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index 34ca847..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_pulse_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpg Binary files differdeleted file mode 100644 index f4a3934..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index d580182..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_shuttle_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpg Binary files differdeleted file mode 100644 index 8f3ec2d..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index ba76f18..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stars_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpg Binary files differdeleted file mode 100644 index fdd4aaf..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index 432d67d..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_stream_small.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index a8b6880..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index 11c253e..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_street_lights_small.jpg +++ /dev/null diff --git a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpg b/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpg Binary files differdeleted file mode 100644 index 660040e..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index ed79925..0000000 --- a/overlay/packages/apps/Launcher2/res/drawable-hdpi/wallpaper_sunset_small.jpg +++ /dev/null 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 Binary files differdeleted file mode 100644 index 84462e2..0000000 --- a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/nexus_thumb.png +++ /dev/null diff --git a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.png b/overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.png Binary files differdeleted file mode 100644 index 2310a91..0000000 --- a/overlay/packages/wallpapers/Basic/res/drawable-hdpi/pyramid_background.png +++ /dev/null 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) |