Merge pull request #2688 from ace20022/cleanup_settings
authorSascha Montellese <sascha.montellese@gmail.com>
Wed, 3 Jul 2013 20:31:33 +0000 (13:31 -0700)
committerSascha Montellese <sascha.montellese@gmail.com>
Wed, 3 Jul 2013 20:31:33 +0000 (13:31 -0700)
[Settings] Clean up things found by Cppcheck

209 files changed:
addons/weather.wunderground/README.txt
addons/weather.wunderground/addon.xml
addons/weather.wunderground/changelog.txt
addons/weather.wunderground/default.py
addons/weather.wunderground/resources/language/Albanian/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/Amharic/strings.po
addons/weather.wunderground/resources/language/Bulgarian/strings.po
addons/weather.wunderground/resources/language/Burmese/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/Catalan/strings.po
addons/weather.wunderground/resources/language/Chinese (Simple)/strings.po
addons/weather.wunderground/resources/language/Croatian/strings.po
addons/weather.wunderground/resources/language/Czech/strings.po
addons/weather.wunderground/resources/language/Dutch/strings.po
addons/weather.wunderground/resources/language/English (US)/strings.po [deleted file]
addons/weather.wunderground/resources/language/English/strings.po
addons/weather.wunderground/resources/language/Faroese/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/French/strings.po
addons/weather.wunderground/resources/language/German/strings.po
addons/weather.wunderground/resources/language/Greek/strings.po
addons/weather.wunderground/resources/language/Icelandic/strings.po
addons/weather.wunderground/resources/language/Indonesian/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/Italian/strings.po
addons/weather.wunderground/resources/language/Polish/strings.po
addons/weather.wunderground/resources/language/Portuguese/strings.po
addons/weather.wunderground/resources/language/Spanish (Argentina)/strings.po
addons/weather.wunderground/resources/language/Swedish/strings.po
addons/weather.wunderground/resources/language/Tamil (India)/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/Turkish/strings.po
addons/weather.wunderground/resources/language/Ukrainian/strings.po
addons/weather.wunderground/resources/language/Uzbek/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/Vietnamese/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/language/Welsh/strings.po [new file with mode: 0644]
addons/weather.wunderground/resources/lib/utilities.py
addons/weather.wunderground/resources/lib/wunderground/wunderground.py
addons/weather.wunderground/resources/settings.xml
addons/xbmc.addon/addon.xml
configure.in
lib/DllAvCodec.h
lib/DllAvFilter.h
lib/addons/library.xbmc.addon/libXBMC_addon.cpp
tools/android/packaging/xbmc/AndroidManifest.xml
tools/codegenerator/Helper.groovy
tools/darwin/packaging/xbmc-atv2/mkdeb-xbmc-atv2.sh
tools/darwin/packaging/xbmc-ios/mkdeb-xbmc-ios.sh
tools/depends/target/librtmp/Makefile
tools/depends/target/librtmp/libm.patch [new file with mode: 0644]
xbmc/Application.cpp
xbmc/GUIInfoManager.h
xbmc/android/jni/ApplicationInfo.cpp
xbmc/android/jni/ApplicationInfo.h
xbmc/android/jni/AudioManager.cpp
xbmc/android/jni/AudioManager.h
xbmc/android/jni/BaseColumns.cpp
xbmc/android/jni/BaseColumns.h
xbmc/android/jni/BitSet.cpp
xbmc/android/jni/BitSet.h
xbmc/android/jni/Bitmap.h
xbmc/android/jni/BitmapDrawable.cpp
xbmc/android/jni/BitmapDrawable.h
xbmc/android/jni/BroadcastReceiver.h
xbmc/android/jni/CharSequence.cpp
xbmc/android/jni/CharSequence.h
xbmc/android/jni/ClassLoader.cpp
xbmc/android/jni/ClassLoader.h
xbmc/android/jni/ConnectivityManager.cpp
xbmc/android/jni/ConnectivityManager.h
xbmc/android/jni/ContentResolver.cpp
xbmc/android/jni/ContentResolver.h
xbmc/android/jni/Context.cpp
xbmc/android/jni/Context.h
xbmc/android/jni/Cursor.cpp
xbmc/android/jni/Cursor.h
xbmc/android/jni/DhcpInfo.cpp
xbmc/android/jni/DhcpInfo.h
xbmc/android/jni/Drawable.h
xbmc/android/jni/Enum.cpp
xbmc/android/jni/Enum.h
xbmc/android/jni/Environment.cpp
xbmc/android/jni/Environment.h
xbmc/android/jni/File.cpp
xbmc/android/jni/File.h
xbmc/android/jni/Intent.cpp
xbmc/android/jni/Intent.h
xbmc/android/jni/IntentFilter.cpp
xbmc/android/jni/IntentFilter.h
xbmc/android/jni/JNIBase.cpp
xbmc/android/jni/JNIBase.h
xbmc/android/jni/List.cpp
xbmc/android/jni/List.h
xbmc/android/jni/MediaStore.cpp
xbmc/android/jni/MediaStore.h
xbmc/android/jni/NetworkInfo.cpp
xbmc/android/jni/NetworkInfo.h
xbmc/android/jni/PackageManager.cpp
xbmc/android/jni/PackageManager.h
xbmc/android/jni/PowerManager.cpp
xbmc/android/jni/PowerManager.h
xbmc/android/jni/ScanResult.cpp
xbmc/android/jni/ScanResult.h
xbmc/android/jni/StatFs.cpp
xbmc/android/jni/StatFs.h
xbmc/android/jni/System.cpp
xbmc/android/jni/System.h
xbmc/android/jni/SystemClock.cpp
xbmc/android/jni/SystemClock.h
xbmc/android/jni/URI.cpp
xbmc/android/jni/URI.h
xbmc/android/jni/WakeLock.cpp
xbmc/android/jni/WakeLock.h
xbmc/android/jni/WifiConfiguration.cpp
xbmc/android/jni/WifiConfiguration.h
xbmc/android/jni/WifiInfo.cpp
xbmc/android/jni/WifiInfo.h
xbmc/android/jni/WifiManager.cpp
xbmc/android/jni/WifiManager.h
xbmc/android/jni/jutils.cpp
xbmc/cdrip/EncoderFFmpeg.cpp
xbmc/cores/AudioEngine/Encoders/AEEncoderFFmpeg.cpp
xbmc/cores/AudioEngine/Encoders/AEEncoderFFmpeg.h
xbmc/cores/AudioEngine/Interfaces/AEEncoder.h
xbmc/cores/amlplayer/AMLPlayer.cpp
xbmc/cores/dvdplayer/DVDAudio.cpp
xbmc/cores/dvdplayer/DVDAudio.h
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.h
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecLPcm.cpp
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecLPcm.h
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthrough.cpp
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.h
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.cpp
xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPcm.h
xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecSSA.cpp
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecTX3G.cpp
xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecText.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAmlogic.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecCrystalHD.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecOpenMax.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVDA.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecVideoToolBox.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DXVA.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/OpenMaxVideo.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemux.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemux.h
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxBXA.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxCDDA.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxHTSP.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxPVRClient.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxShoutcast.cpp
xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxVobsub.cpp
xbmc/cores/dvdplayer/DVDFileInfo.cpp
xbmc/cores/dvdplayer/DVDPlayerSubtitle.cpp
xbmc/cores/dvdplayer/DVDPlayerTeletext.cpp
xbmc/cores/dvdplayer/DVDPlayerVideo.h
xbmc/cores/dvdplayer/DVDStreamInfo.cpp
xbmc/cores/dvdplayer/DVDStreamInfo.h
xbmc/cores/omxplayer/OMXAudio.cpp
xbmc/cores/omxplayer/OMXAudio.h
xbmc/cores/omxplayer/OMXPlayer.cpp
xbmc/cores/omxplayer/OMXPlayerAudio.cpp
xbmc/cores/omxplayer/OMXPlayerAudio.h
xbmc/cores/omxplayer/OMXPlayerVideo.cpp
xbmc/cores/omxplayer/OMXPlayerVideo.h
xbmc/cores/omxplayer/OMXVideo.cpp
xbmc/cores/omxplayer/OMXVideo.h
xbmc/cores/paplayer/DVDPlayerCodec.cpp
xbmc/guilib/Key.h
xbmc/input/XBIRRemote.h
xbmc/interfaces/legacy/Keyboard.h
xbmc/interfaces/legacy/ListItem.h
xbmc/interfaces/python/PythonSwig.cpp.template
xbmc/interfaces/python/XBPyThread.cpp
xbmc/linux/OMXClock.cpp
xbmc/linux/OMXClock.h
xbmc/linux/OMXCore.cpp
xbmc/linux/RBP.cpp
xbmc/linux/RBP.h
xbmc/music/Album.cpp
xbmc/music/MusicDatabase.cpp
xbmc/music/infoscanner/MusicInfoScanner.cpp
xbmc/music/windows/GUIWindowMusicBase.cpp
xbmc/music/windows/GUIWindowMusicBase.h
xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp
xbmc/osx/Info.plist
xbmc/pvr/dialogs/GUIDialogPVRChannelManager.cpp
xbmc/pvr/dialogs/GUIDialogPVRChannelManager.h
xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.cpp
xbmc/pvr/dialogs/GUIDialogPVRChannelsOSD.h
xbmc/pvr/dialogs/GUIDialogPVRGroupManager.cpp
xbmc/pvr/dialogs/GUIDialogPVRGroupManager.h
xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.h
xbmc/pvr/dialogs/GUIDialogPVRGuideOSD.cpp
xbmc/pvr/dialogs/GUIDialogPVRGuideOSD.h
xbmc/pvr/dialogs/GUIDialogPVRGuideSearch.cpp
xbmc/pvr/dialogs/GUIDialogPVRGuideSearch.h
xbmc/pvr/dialogs/GUIDialogPVRTimerSettings.cpp
xbmc/settings/AdvancedSettings.cpp
xbmc/utils/BitstreamConverter.cpp
xbmc/utils/BitstreamConverter.h
xbmc/video/VideoInfoScanner.cpp
xbmc/win32/XBMC_PC.rc

index 2b7b742..9f03753 100644 (file)
@@ -14,7 +14,7 @@ Current.Humidity
 Current.FeelsLike
 Current.UVIndex
 Current.DewPoint
-Current.OutlookIcon
+Current.ConditionIcon
 Current.FanartCode
 
 
@@ -52,6 +52,8 @@ Forecast.Updated
 CURRENT
 -------
 Current.IsFetched
+Current.LocalTime
+Current.LocalDate
 Current.WindDegree
 Current.SolarRadiation
 Current.Pressure
index 4bdb7e2..1de8eea 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="weather.wunderground" name="Weather Underground" version="1.0.9" provider-name="Team XBMC">
+<addon id="weather.wunderground" name="Weather Underground" version="1.0.15" provider-name="Team XBMC">
        <requires>
                <import addon="xbmc.python" version="2.1.0"/>
                <import addon="script.module.simplejson" version="2.0.10"/>
@@ -8,11 +8,13 @@
        <extension point="xbmc.python.module" library="resources/lib/wunderground"/>
        <extension point="xbmc.addon.metadata">
                <summary lang="af">Weer voorspelling vanaf wunderground.com</summary>
+               <summary lang="am">የአየር ንብረት ከ wunderground.com</summary>
                <summary lang="ar">توقعات الطقس من wunderground.com</summary>
                <summary lang="be">Прагноз надвор'я з wunderground.com</summary>
                <summary lang="bg">Синоптична прогноза от wunderground.com</summary>
-               <summary lang="ca">Previsió del temps des de wunderground.com</summary>
+               <summary lang="ca">Previsió del temps de wunderground.com</summary>
                <summary lang="cs">Předpověď počasí z wunderground.com</summary>
+               <summary lang="cy">Rhagolygon tywydd gan wunderground.com</summary>
                <summary lang="da">Vejrudsigt fra wunderground.com</summary>
                <summary lang="de">Wettervorhersage von wunderground.com</summary>
                <summary lang="el">Πρόγνωση καιρού από το wunderground.com</summary>
                <summary lang="et">Ilmaennustus portaalist wunderground.com</summary>
                <summary lang="eu">Eguraldi iragarpena wunderground.com-etik</summary>
                <summary lang="fi">Sääennusteet wunderground.com-sivustolta</summary>
+               <summary lang="fo">Veðurlíkindi frá wunderground.com</summary>
                <summary lang="fr">Prévisions météo fournies par wunderground.com</summary>
                <summary lang="gl">Predición meteorolóxica de wunderground.com</summary>
                <summary lang="he">תחזית מזג האויר מאת wunderground.com</summary>
-               <summary lang="hr">Prognoza vremena od wunderground.com</summary>
+               <summary lang="hr">Prognoza vremena s wunderground.com</summary>
                <summary lang="hu">Időjárás előrejelzés a wunderground.com-tól</summary>
                <summary lang="is">Veðurspár frá wunderground.com</summary>
                <summary lang="it">Meteo fornito da wunderground.com</summary>
@@ -34,6 +37,7 @@
                <summary lang="ko">wunderground.com 날씨예보</summary>
                <summary lang="lt">Orų prognozė nuo/iš wunderground.com</summary>
                <summary lang="mk">Временска прогноза од wunderground.com</summary>
+               <summary lang="my">wunderground.com မှ ရာသီဥတုခန့်မှန်းချက်</summary>
                <summary lang="nl">Weersvoorspelling van wunderground.com</summary>
                <summary lang="no">Værvarsel fra wunderground.com</summary>
                <summary lang="pl">Prognoza pogody ze strony wunderground.com</summary>
                <summary lang="ru">Прогноз погоды с сайта wunderground.com</summary>
                <summary lang="sk">Predpoveď počasia z wunderground.com</summary>
                <summary lang="sl">Vremenska napoved, ki jo zagotavlja wunderground.com</summary>
+               <summary lang="sq">Parashikimi i motit nga wunderground.com</summary>
                <summary lang="sv">Väderprognos från wunderground.com</summary>
+               <summary lang="ta_IN">Wunderground.com இருந்து வானிலை முன்னறிவிப்பு</summary>
                <summary lang="th">พยากรณ์อากาศจาก wunderground.com</summary>
                <summary lang="tr">Hava durumu wunderground.com sitesinden alınır</summary>
                <summary lang="uk">Прогноз погоди з wunderground.com</summary>
+               <summary lang="uz">wunderground.com dan ob-havo ma'lumoti</summary>
+               <summary lang="vi">Dự báo thời tiết từ wunderground.com</summary>
                <summary lang="zh">来自wunderground.com的天气预报</summary>
                <summary lang="zh_TW">weatherground.com 上的天氣預報</summary>
                <description lang="af">Weer voorspelling verskaf deur Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="am">የአየር ንብረት የሚቀርበው በ Weather Underground (http://www.wunderground.com/)</description>
                <description lang="ar">توقعات الطقس من تقديم Weather Underground&#10;(http://www.wunderground.com/)</description>
                <description lang="be">Прагноз надвор'я створаны Weather Underground (http://www.wunderground.com/)</description>
                <description lang="bg">Синоптична прогноза с данните от Weather Underground (http://www.wunderground.com/)</description>
                <description lang="ca">Previsió del temps proporcionada per Weather Underground (http://www.wunderground.com/)</description>
                <description lang="cs">Předpověď počasí poskytnuta stránkou Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="cy">Rhagolygon tywydd gan Weather Underground (http://www.wunderground.com/)</description>
                <description lang="da">Vejrudsigten leveres af Weather Underground (http://www.wunderground.com/)</description>
                <description lang="de">Wettervorhersage bereitgestellt durch Weather Underground (http://www.wunderground.com/)</description>
                <description lang="el">Η πρόγνωση καιρού παρέχεται από το Weather Underground (http://www.wunderground.com/)</description>
@@ -64,6 +74,7 @@
                <description lang="es_MX">Pronóstico del tiempo por Weather Underground&#10;(http://www.wunderground.com/)</description>
                <description lang="et">Ilma ennustab Weather Underground (http://www.wunderground.com/)</description>
                <description lang="fi">Sääennusteet Weather Underground -sivuston tarjoamina (http://www.wunderground.com/)</description>
+               <description lang="fo">Veðurlíkindi eru veitt av Weather Underground (http://www.wunderground.com)</description>
                <description lang="fr">Prévisions météo fournies par Weather Underground (http://www.wunderground.com/)</description>
                <description lang="gl">Predición meteorolóxica provista por Weather Underground&#10;(http://www.wunderground.com/)</description>
                <description lang="he">תחזית מזג האויר ניתנת ע"י Weather Underground (http://www.wunderground.com</description>
@@ -75,6 +86,7 @@
                <description lang="ko">Weather Underground (http://www.wunderground.com/)가 제공하는 날씨예보</description>
                <description lang="lt">Orų prognozė teikiama (pateikiama) iš Weather Underground (http://www.wunderground.com/)</description>
                <description lang="mk">Временска прогноза обезбедена од Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="my">ရာသီဥတုခန့်မှန်းချက်ကို Weather Underground (http://www.wunderground.com/) မှထောက်ပံ့ပေးထားပါသည်။</description>
                <description lang="nl">Weersvoorspelling voorzien door Weather Underground&#10;(http://www.wunderground.com/)</description>
                <description lang="no">Værvarsel fra Weather Underground (http://www.wunderground.com)</description>
                <description lang="pl">Prognoza pogody jest dostarczona dzięki uprzejmości serwisu: (http://www.wunderground.com/)</description>
                <description lang="ru">Прогноз погоды предоставлен компанией Weather Underground (http://www.wunderground.com/)</description>
                <description lang="sk">Predpoveď počasia poskytovaná od Weather Underground (http://www.wunderground.com/)</description>
                <description lang="sl">Vremenska napoved, ki jo zagotavlja Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="sq">Parashikimi i motit i pajisur nga Weahter Underground&#10;(http://www.wunderground.com/)</description>
                <description lang="sv">Väderprognos tillhandahållen av Weather Underground&#10;(http://www.wunderground.com/)</description>
+               <description lang="ta_IN">வானிலை முன்னறிவிப்பு வழங்குபவர் வானிலை அண்டர்கிரவுண்டு (http://www.wunderground.com/)</description>
                <description lang="th">พยากรณ์อากาศโดย Weather Underground &#10;(http://www.wunderground.com/)</description>
                <description lang="tr">Hava Durumu Weather Underground tarafından sağlanır (http://www.wunderground.com/)</description>
                <description lang="uk">Прогноз погоди надано Weather Underground (http://www.wunderground.com/)</description>
+               <description lang="uz">Ob-havo ma'lumoti Weather Underground (http://www.wunderground.com/) tomonidan taqdim etilgan</description>
+               <description lang="vi">Dự báo thời tiết từ Weather Underground (http://www.wunderground.com/)</description>
                <description lang="zh">由Weather Underground(http://www.wunderground.com/)提供的天气预报</description>
                <description lang="zh_TW">天氣預報由 Weather Underground (http://www.wunderground.com/) 所提供</description>
                <disclaimer lang="af">Die gebruik van hierdie byvoegsel impliseer dat U saamstem met die Terme van Diens uiteengesit op http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="bg">Употребявайки добавката Вие се съгласявате с условията за ползване на услугата, които се намират на http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="ca">L'ús d'aquest complement implica que vostè ha acceptat els termes de servei ubicats a http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="cs">Používáním tohoto rozšíření schvalujete podmínky užívání umístěné na http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
-               <disclaimer lang="da">Brug af denne add-on indebærer, at du har erklæret dig enig i vilkårene for tjenesten, der findes på http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="cy">Mae defnyddio'r ategyn yma'n awgrymu eich bod yn cytuno i'r Amodau Gwasanaeth sydd yn http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="da">Brug af denne addon indebærer, at du har erklæret dig enig i vilkårene for tjenesten, der findes på http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="de">Mit Benutzung dieses Addons bestätigen Sie, dass Sie den Nutzungsbedingungen auf http://www.wunderground.com/weather/api/d/terms.html zustimmen.</disclaimer>
                <disclaimer lang="el">Χρήση αυτού του πρόσθετου συνεπάγεται την αποδοχή των Όρων Χρήσης της Υπηρεσίας (Terms of Service) οι οποίοι βρίσκονται στο http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="en">Use of this add-on implies that you have agreed to the Terms of Service located at http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="et">Selle lisamooduli kasutamine viitab sellele, et te olete nõustunud kasutajatingimustega aadressil http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="eu">Gehigarri hau erabiltzeak http://www.wunderground.com/weather/api/d/terms.html -en aurkitzen diren zerbitzu baldintzak onartzen inplikatzen du.</disclaimer>
                <disclaimer lang="fi">Tämän lisäosan käyttäminen tarkoittaa, että olet hyväksynyt osoitteessa http://www.wunderground.com/weather/api/d/terms.html sijaitsevat käyttöehdot</disclaimer>
+               <disclaimer lang="fo">Nýtsla av hesi víðkan merkir at tú góðtekur treytirnar sum finnast á http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="fr">L'utilisation de cette extension implique votre acceptation des Conditions Générales d'Utilisation disponibles sur http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="gl">Empregar este Engadido implica que vostede aceptou os termos de servizo localizados en http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="he">שימוש בתוסף זה משתמע שאישרת את תנאי השימוש אשר ממוקמים בכתובת הבאה http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
-               <disclaimer lang="hr">Upotreba ovog add-ona podrazumjeva da se slažete sa Pravilima korištenja koja se nalaze na http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="hr">Upotreba ovog dodatka podrazumijeva da se slažete s Pravilima korištenja koja se nalaze na http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="hu">A kiegészítő használatával elfogadod a következő feltételeket: http://www.wunderground.com/weather/api/d/terms.html&#10;&#10;    </disclaimer>
                <disclaimer lang="is">Notkun á þessari viðbót gefur til kynna að þú hafir samþykkt skilmálana sem finna má á http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="it">Usando questo add-on accetti i Termini di Servizio consultabili su http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="ko">이 애드온을 사용하는 것은 http://www.wunderground.com/weather/api/d/terms.html 에 있는 서비스 약관에 동의함을 의미합니다</disclaimer>
                <disclaimer lang="lt">Naudodami šį priedą jūs sutinate(-kote) su paslaugų teikimo sąlygomis esančiomis http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="mk">Користење на овој додаток имплицира дека се согласувате со условите за користење кои се наоѓаат на http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="my">ဒီ add-on ကိုသုံးခြင်းသည် http://www.wunderground.com/weather/api/d/terms.html တွင်ရှိသော Terms of Service ကိုသဘောတူညီဟု သတ်မှတ်သည်</disclaimer>
                <disclaimer lang="nl">Het gebruik van deze add-on impliceert dat je akkoord gaat met de service-voorwaarden op http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="no">Bruken av dette tillegget betinger at du har godkjent brukervilkårene på http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="pl">Korzystanie z tego dodatku jest równoważne z akceptacją regulaminu dostępnego pod adresem: http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="ru">Используя это дополнение, вы соглашаетесь с условиями предоставления услуг, доступными по адресу http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="sk">Používaním tohto doplnku súhlasíte s podmienkami používania služby umiestnenými na http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="sl">Z uporabo vtičnika se strinjate s Pogoji uporabe, ki se nahajajo na http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="sq">Përdorimi i kësaj shtesës nënkupton që ke lexuar Termat e Shërbimit të lokalizuar tek http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="sv">Användning av detta tillägg innebär att ni har accepterat användarvillkoren som går att hitta på&#10;http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="ta_IN">விதிமுறைகள் ஒப்பு கொண்டீர் என்று தெரிகிறது http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="th">ในการใช้บริการโปรแกรมเสริมนี้หมายความว่าคุณได้ยอมรับเงื่อนไขในการให้บริการโดย http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="tr">Bu eklentinin kullanımı aynı zamanda http://www.wunderground.com/weather/api/d/terms.html adresindeki Kullanım koşullarını da kabul ettiğiniz anlamına gelir.</disclaimer>
                <disclaimer lang="uk">Скориставшись цією надбудовою, ви тим самим погоджуєтеся з умовами використання: http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
+               <disclaimer lang="vi">Khi sử dụng add-on này đồng nghĩa với việc bạn đồng ý với các điều khoản sử dụng dịch vụ của nhà cung cấp tại địa chỉ http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="zh">使用此扩展功能意味着你同意此连接下的服务条款:http://www.wunderground.com/weather/api/d/terms.html</disclaimer>
                <disclaimer lang="zh_TW">使用這個附加元件代表你同意 http://www.wunderground.com/weather/api/d/terms.html 所載之使用者條款</disclaimer>
+               <language></language>
                <platform>all</platform>
+               <forum>http://forum.xbmc.org/showthread.php?tid=116668</forum>
+               <source>https://code.google.com/p/ronie/source/</source>
        </extension>
 </addon>
index a7193a7..ce97292 100644 (file)
@@ -1,3 +1,27 @@
+v1.0.15
+- fix animated radar images
+- added gzip compression for image retrieval
+
+v1.0.14
+- add support for 5 locations
+- fix possible incorrect display of location name
+- remove old backward compatibility code
+
+v1.0.13
+- added localtime and localdate infolabels
+
+v1.0.12
+- added yyyy-mm-dd format for regions that use this format
+- fixed strip returns in rss label
+
+v1.0.11
+- fix corrupted alert message
+
+v1.0.10
+- fix potential crash on invalid json response
+- fix api error response check
+- added gzip compression support
+
 v1.0.9
 - updated language files from Transifex
 
index c86590b..00110b5 100644 (file)
@@ -16,8 +16,9 @@
 # *  http://www.gnu.org/copyleft/gpl.html
 
 
-import os, sys, socket, unicodedata, urllib2, time, base64
+import os, sys, socket, unicodedata, urllib2, time, base64, gzip
 from datetime import date
+from StringIO import StringIO
 import xbmc, xbmcgui, xbmcaddon, xbmcvfs
 if sys.version_info < (2, 7):
     import simplejson
@@ -52,6 +53,13 @@ MAXDAYS          = 6
 
 socket.setdefaulttimeout(10)
 
+def recode(alert): # workaround: wunderground provides a corrupt alerts message
+    try:
+        alert = alert.encode("latin-1").rstrip('&nbsp)').decode("utf-8")
+    except:
+        pass
+    return alert
+
 def log(txt):
     if DEBUG == 'true':
         if isinstance (txt,str):
@@ -64,7 +72,7 @@ def set_property(name, value):
 
 def refresh_locations():
     locations = 0
-    for count in range(1, 4):
+    for count in range(1, 6):
         loc_name = __addon__.getSetting('Location%s' % count)
         if loc_name != '':
             locations += 1
@@ -120,19 +128,20 @@ def geoip():
         __addon__.setSetting('Location1id', locationid)
         log('geoip location: %s' % location)
     else:
+        location = ''
         locationid = ''
-    return locationid
+    return location, locationid
 
-def forecast(loc):
+def forecast(loc,locid):
     try:
         lang = LANG[LANGUAGE]
     except:
         lang = 'EN'
     opt = 'lang:' + lang
-    log('weather location: %s' % loc)
+    log('weather location: %s' % locid)
     retry = 0
     while (retry < 6) and (not xbmc.abortRequested):
-        query = wundergroundapi(WEATHER_FEATURES, opt, loc, FORMAT)
+        query = wundergroundapi(WEATHER_FEATURES, opt, locid, FORMAT)
         if query != '':
             retry = 6
         else:
@@ -141,8 +150,8 @@ def forecast(loc):
             log('weather download failed')
     log('forecast data: %s' % query)
     data = parse_data(query)
-    if data != '' and not data.has_key('error'):
-        properties(data,loc)
+    if data != '' and data.has_key('response') and not data['response'].has_key('error'):
+        properties(data,loc,locid)
     else:
         clear()
 
@@ -175,13 +184,10 @@ def parse_data(json):
         data = ''
     return data
 
-def properties(data,loc):
+def properties(data,loc,locid):
 # standard properties
     weathercode = WEATHER_CODES[data['current_observation']['icon_url'][31:-4]]
-    location = __addon__.getSetting('Location%s' % sys.argv[1])
-    if (location == '') and (sys.argv[1] != '1'):
-        location = __addon__.getSetting('Location1')
-    set_property('Current.Location'      , location)
+    set_property('Current.Location'      , loc)
     set_property('Current.Condition'     , data['current_observation']['weather'])
     set_property('Current.Temperature'   , str(data['current_observation']['temp_c']))
     set_property('Current.Wind'          , str(data['current_observation']['wind_kph']))
@@ -190,7 +196,7 @@ def properties(data,loc):
     set_property('Current.FeelsLike'     , data['current_observation']['feelslike_c'])
     set_property('Current.UVIndex'       , data['current_observation']['UV'])
     set_property('Current.DewPoint'      , str(data['current_observation']['dewpoint_c']))
-    set_property('Current.OutlookIcon'   , '%s.png' % weathercode)
+    set_property('Current.OutlookIcon'   , '%s.png' % weathercode) # xbmc translates it to Current.ConditionIcon
     set_property('Current.FanartCode'    , weathercode)
     for count, item in enumerate(data['forecast']['simpleforecast']['forecastday']):
         weathercode = WEATHER_CODES[item['icon_url'][31:-4]]
@@ -208,17 +214,27 @@ def properties(data,loc):
     set_property('Forecast.State'            , data['current_observation']['display_location']['state_name'])
     set_property('Forecast.Country'          , data['current_observation']['display_location']['country'])
     update = time.localtime(float(data['current_observation']['observation_epoch']))
-    if DATEFORMAT[1] == 'm':
-        localdate = WEEKDAY[update[6]] + ' ' + MONTH[update[1]] + ' ' + str(update[2]) + ', ' + str(update[0])
+    local = time.localtime(float(data['current_observation']['local_epoch']))
+    if DATEFORMAT[1] == 'd':
+        updatedate = WEEKDAY[update[6]] + ' ' + str(update[2]) + ' ' + MONTH[update[1]] + ' ' + str(update[0])
+        localdate = WEEKDAY[local[6]] + ' ' + str(local[2]) + ' ' + MONTH[local[1]] + ' ' + str(local[0])
+    elif DATEFORMAT[1] == 'm':
+        updatedate = WEEKDAY[update[6]] + ' ' + MONTH[update[1]] + ' ' + str(update[2]) + ', ' + str(update[0])
+        localdate = WEEKDAY[local[6]] + ' ' + str(local[2]) + ' ' + MONTH[local[1]] + ' ' + str(local[0])
     else:
-        localdate = WEEKDAY[update[6]] + ' ' + str(update[2]) + ' ' + MONTH[update[1]] + ' ' + str(update[0])
+        updatedate = WEEKDAY[update[6]] + ' ' + str(update[0]) + ' ' + MONTH[update[1]] + ' ' + str(update[2])
+        localdate = WEEKDAY[local[6]] + ' ' + str(local[0]) + ' ' + MONTH[local[1]] + ' ' + str(local[2])
     if TIMEFORMAT != '/':
-        localtime = time.strftime('%I:%M%p', update)
+        updatetime = time.strftime('%I:%M%p', update)
+        localtime = time.strftime('%I:%M%p', local)
     else:
-        localtime = time.strftime('%H:%M', update)
-    set_property('Forecast.Updated'          , localdate + ' - ' + localtime)
+        updatetime = time.strftime('%H:%M', update)
+        localtime = time.strftime('%H:%M', local)
+    set_property('Forecast.Updated'          , updatedate + ' - ' + updatetime)
 # current properties
     set_property('Current.IsFetched'         , 'true')
+    set_property('Current.LocalTime'         , localtime)
+    set_property('Current.LocalDate'         , localdate)
     set_property('Current.WindDegree'        , str(data['current_observation']['wind_degrees']) + u'°')
     set_property('Current.SolarRadiation'    , str(data['current_observation']['solarradiation']))
     if 'F' in TEMPUNIT:
@@ -295,12 +311,12 @@ def properties(data,loc):
         weathercode = WEATHER_CODES[item['icon_url'][31:-4]]
         set_property('Daily.%i.LongDay'              % (count+1), item['date']['weekday'])
         set_property('Daily.%i.ShortDay'             % (count+1), item['date']['weekday_short'])
-        if DATEFORMAT[1] == 'm':
-            set_property('Daily.%i.LongDate'         % (count+1), item['date']['monthname'] + ' ' + str(item['date']['day']))
-            set_property('Daily.%i.ShortDate'        % (count+1), MONTH[item['date']['month']] + ' ' + str(item['date']['day']))
-        else:
+        if DATEFORMAT[1] == 'd':
             set_property('Daily.%i.LongDate'         % (count+1), str(item['date']['day']) + ' ' + item['date']['monthname'])
             set_property('Daily.%i.ShortDate'        % (count+1), str(item['date']['day']) + ' ' + MONTH[item['date']['month']])
+        else:
+            set_property('Daily.%i.LongDate'         % (count+1), item['date']['monthname'] + ' ' + str(item['date']['day']))
+            set_property('Daily.%i.ShortDate'        % (count+1), MONTH[item['date']['month']] + ' ' + str(item['date']['day']))
         set_property('Daily.%i.Outlook'              % (count+1), item['conditions'])
         set_property('Daily.%i.OutlookIcon'          % (count+1), WEATHER_ICON % weathercode)
         set_property('Daily.%i.FanartCode'           % (count+1), weathercode)
@@ -348,12 +364,12 @@ def properties(data,loc):
             weathercode = WEATHER_CODES[item['icon_url'][31:-4]]
             set_property('Weekend.%i.LongDay'                  % (count+1), item['date']['weekday'])
             set_property('Weekend.%i.ShortDay'                 % (count+1), item['date']['weekday_short'])
-            if DATEFORMAT[1] == 'm':
-                set_property('Weekend.%i.LongDate'             % (count+1), item['date']['monthname'] + ' ' + str(item['date']['day']))
-                set_property('Weekend.%i.ShortDate'            % (count+1), MONTH[item['date']['month']] + ' ' + str(item['date']['day']))
-            else:
+            if DATEFORMAT[1] == 'd':
                 set_property('Weekend.%i.LongDate'             % (count+1), str(item['date']['day']) + ' ' + item['date']['monthname'])
                 set_property('Weekend.%i.ShortDate'            % (count+1), str(item['date']['day']) + ' ' + MONTH[item['date']['month']])
+            else:
+                set_property('Weekend.%i.LongDate'             % (count+1), item['date']['monthname'] + ' ' + str(item['date']['day']))
+                set_property('Weekend.%i.ShortDate'            % (count+1), MONTH[item['date']['month']] + ' ' + str(item['date']['day']))
             set_property('Weekend.%i.Outlook'                  % (count+1), item['conditions'])
             set_property('Weekend.%i.OutlookIcon'              % (count+1), WEATHER_ICON % weathercode)
             set_property('Weekend.%i.FanartCode'               % (count+1), weathercode)
@@ -468,12 +484,12 @@ def properties(data,loc):
             set_property('Hourly.%i.Time'            % (count+1), item['FCTTIME']['civil'])
         else:
             set_property('Hourly.%i.Time'            % (count+1), item['FCTTIME']['hour_padded'] + ':' + item['FCTTIME']['min'])
-        if DATEFORMAT[1] == 'm':
-            set_property('Hourly.%i.ShortDate'       % (count+1), item['FCTTIME']['month_name_abbrev'] + ' ' + item['FCTTIME']['mday_padded'])
-            set_property('Hourly.%i.LongDate'        % (count+1), item['FCTTIME']['month_name'] + ' ' + item['FCTTIME']['mday_padded'])
-        else:
+        if DATEFORMAT[1] == 'd':
             set_property('Hourly.%i.ShortDate'       % (count+1), item['FCTTIME']['mday_padded'] + ' ' + item['FCTTIME']['month_name_abbrev'])
             set_property('Hourly.%i.LongDate'        % (count+1), item['FCTTIME']['mday_padded'] + ' ' + item['FCTTIME']['month_name'])
+        else:
+            set_property('Hourly.%i.ShortDate'       % (count+1), item['FCTTIME']['month_name_abbrev'] + ' ' + item['FCTTIME']['mday_padded'])
+            set_property('Hourly.%i.LongDate'        % (count+1), item['FCTTIME']['month_name'] + ' ' + item['FCTTIME']['mday_padded'])
         if 'F' in TEMPUNIT:
             set_property('Hourly.%i.Temperature'     % (count+1), item['temp']['english'] + TEMPUNIT)
             set_property('Hourly.%i.DewPoint'        % (count+1), item['dewpoint']['english'] + TEMPUNIT)
@@ -507,23 +523,23 @@ def properties(data,loc):
         set_property('Hourly.%i.Outlook'             % (count+1), item['condition'])
         set_property('Hourly.%i.OutlookIcon'         % (count+1), WEATHER_ICON % weathercode)
         set_property('Hourly.%i.FanartCode'          % (count+1), weathercode)
-        if count == 35: # workaround: wunderground provides a 10day hourly forecast
-            break
 # alert properties
     set_property('Alerts.IsFetched', 'true')
     if str(data['alerts']) != '[]':
         rss = ''
         alerts = ''
         for count, item in enumerate(data['alerts']):
-            set_property('Alerts.%i.Description'     % (count+1), item['description'])
-            set_property('Alerts.%i.Message'         % (count+1), item['message'])
+            description = recode(item['description']) # workaround: wunderground provides a corrupt alerts message
+            message = recode(item['message']) # workaround: wunderground provides a corrupt alerts message
+            set_property('Alerts.%i.Description'     % (count+1), description)
+            set_property('Alerts.%i.Message'         % (count+1), message)
             set_property('Alerts.%i.StartDate'       % (count+1), item['date'])
             set_property('Alerts.%i.EndDate'         % (count+1), item['expires'])
             set_property('Alerts.%i.Significance'    % (count+1), SEVERITY[item['significance']])
-            rss    = rss + item['description'] + ' - '
-            alerts = alerts + item['message']
+            rss    = rss + description.replace('\n','') + ' - '
+            alerts = alerts + message + '[CR][CR]'
         set_property('Alerts.RSS'   , rss.rstrip(' - '))
-        set_property('Alerts'       , alerts)
+        set_property('Alerts'       , alerts.rstrip('[CR][CR]'))
         set_property('Alerts.Count' , str(count+1))
     else:
         set_property('Alerts.RSS'   , '')
@@ -532,21 +548,16 @@ def properties(data,loc):
 # map properties
     set_property('Map.IsFetched', 'true')
     filelist = []
-    locid = base64.b16encode(loc)
+    locid = base64.b16encode(locid)
     addondir = os.path.join(__cwd__, 'resources', 'logo')
     mapdir = xbmc.translatePath('special://profile/addon_data/%s/map' % __addonid__)
     set_property('MapPath', addondir)
     if not xbmcvfs.exists(mapdir):
         xbmcvfs.mkdir(mapdir)
-    json_query = xbmc.executeJSONRPC('{ "jsonrpc" : "2.0" , "method" : "Files.GetDirectory" , "params" : { "directory" : "%s" , "sort" : { "method" : "file" } } , "id" : 1 }' % mapdir.replace('\\', '\\\\'))
-    json_query = unicode(json_query, 'utf-8', errors='ignore')
-    json_response = simplejson.loads(json_query)
-    if (json_response['result'] != None) and (json_response['result'].has_key('files')) and (json_response['result']['files'] != None):
-        for item in json_response['result']['files']:
-            if item['filetype'] == 'file':
-                filelist.append(item['file'])
+    dirs, filelist = xbmcvfs.listdir(mapdir)
     animate = __addon__.getSetting('Animate')
-    for item in filelist:
+    for img in filelist:
+        item = xbmc.translatePath('special://profile/addon_data/%s/map/%s' % (__addonid__,img)).decode("utf-8")
         if animate == 'true':
             if (time.time() - os.path.getmtime(item) > 14400) or (not locid in item):
                 xbmcvfs.delete(item)
@@ -558,19 +569,26 @@ def properties(data,loc):
     url = data['satellite']['image_url_ir4'].replace('width=300&height=300','width=640&height=360').replace('radius=75','radius=%i' % int(1000/int(zoom.rstrip('0').rstrip('.,'))))
     log('map url: %s' % url)
     try:
-        req = urllib2.urlopen(url)
-        response = req.read()
-        req.close()
+        req = urllib2.Request(url)
+        req.add_header('Accept-encoding', 'gzip')
+        response = urllib2.urlopen(req)
+        if response.info().get('Content-Encoding') == 'gzip':
+            buf = StringIO(response.read())
+            compr = gzip.GzipFile(fileobj=buf)
+            data = compr.read()
+        else:
+            data = response.read()
+        response.close()
         log('satellite image downloaded')
     except:
-        response = ''
+        data = ''
         log('satellite image downloaded failed')
-    if response != '':
+    if data != '':
         timestamp = time.strftime('%Y%m%d%H%M%S')
         mapfile = xbmc.translatePath('special://profile/addon_data/%s/map/%s-%s.png' % (__addonid__,locid,timestamp)).decode("utf-8")
         try:
             tmpmap = open(mapfile, 'wb')
-            tmpmap.write(response)
+            tmpmap.write(data)
             tmpmap.close()
             set_property('MapPath', mapdir)
         except:
@@ -599,19 +617,18 @@ if sys.argv[1].startswith('Location'):
                 log('selected location id: %s' % locationids[selected])
         else:
             dialog.ok(__addonname__, xbmc.getLocalizedString(284))
-
 else:
-    location = __addon__.getSetting('Location%sid' % sys.argv[1])
-    if (location == '') and (sys.argv[1] != '1'):
-        location = __addon__.getSetting('Location1id')
+    location = __addon__.getSetting('Location%s' % sys.argv[1])
+    locationid = __addon__.getSetting('Location%sid' % sys.argv[1])
+    if (locationid == '') and (sys.argv[1] != '1'):
+        location = __addon__.getSetting('Location1')
+        locationid = __addon__.getSetting('Location1id')
         log('trying location 1 instead')
-    if location == '':
+    if locationid == '':
         log('fallback to geoip')
-        location = geoip()
-    if not location == '':
-        if location.startswith('/q/'): # backwards compatibility
-            location = location[3:]
-        forecast(location)
+        location, locationid = geoip()
+    if not locationid == '':
+        forecast(location, locationid)
     else:
         log('no location found')
         clear()
diff --git a/addons/weather.wunderground/resources/language/Albanian/strings.po b/addons/weather.wunderground/resources/language/Albanian/strings.po
new file mode 100644 (file)
index 0000000..ce38dfd
--- /dev/null
@@ -0,0 +1,149 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Albanian (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/sq/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sq\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "Cilësime të vendi"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Cilësime të shtuara"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "Vendi 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "Vendi 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "Vendi 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "Vendi 1 trego emrin"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "Vendi 2 trego emrin"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "Vendi 3 trego emrin"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "Vendi 1 id"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "Vendi 2 id"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "Vendi 3 id"
+
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "Aktivo logging"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "Fundjavë"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "E Shtunë/E Diel "
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "E Premte/E Shtunë"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "E Ejnte/E Premte"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Niveli i zoom'it i hartës"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "Hart e gjallëruar"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Hëna e re"
+
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "Hëna e gjysme duke plotësuar"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Hëna e plotësuar 1/4"
+
+msgctxt "#32504"
+msgid "Waxing Gibbous"
+msgstr "Hëna duke plotësuar"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "Hëna e plotë"
+
+msgctxt "#32506"
+msgid "Waning Gibbous"
+msgstr "Hëna e plotësuar 3/4"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Hëna e plotësuar 3/4"
+
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "Hëna e plotësuar 3/4"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Kujdësi"
+
+msgctxt "#32511"
+msgid "Watch"
+msgstr "Shikimi"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "Këshillë"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "Caktimi"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "Pikëpamje"
+
+msgctxt "#32515"
+msgid "Forecast"
+msgstr "Parashikimi"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "Synopsis"
index f3d7ee0..e395b83 100644 (file)
@@ -60,34 +60,106 @@ msgctxt "#32119"
 msgid "Location 3 id"
 msgstr "አካባቢ 3 መለያ"
 
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "መግቢያ ማስቻያ"
+
 msgctxt "#32121"
 msgid "Weekend"
 msgstr "የሳምንቱ መጨረሻ"
 
 msgctxt "#32122"
 msgid "Saturday/Sunday"
-msgstr "ቅዳሜ / እሑድ "
+msgstr "ቅዳሜ/እሑድ "
 
 msgctxt "#32123"
 msgid "Friday/Saturday"
-msgstr "አርብ / ቅዳሜ "
+msgstr "አርብ/ቅዳሜ "
 
 msgctxt "#32124"
 msgid "Thursday/Friday"
-msgstr "ሐሙስ / አርብ "
+msgstr "ሐሙስ/አርብ "
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "የካርታ ማሳያ መጠን"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "ተንቀሳቃሽ ካርታ"
+
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "አካባቢ 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "አካባቢ 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "አካባቢ 4 ስም ማሳያ"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "አካባቢ 5 ስም ማሳያ"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "አካባቢ 4 መለያ"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "አካባቢ 5 መለያ"
 
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "አዲስ ጨረቃ "
 
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "እየጨመረ የሚሄድ ከ ግማሽ በታች"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "የመጀመሪያው ሩብ"
+
+msgctxt "#32504"
+msgid "Waxing Gibbous"
+msgstr "እየጨመረ የሚሄድ ከ ግማሽ በላይ "
+
 msgctxt "#32505"
 msgid "Full Moon"
 msgstr "ሙሉ ጨረቃ "
 
+msgctxt "#32506"
+msgid "Waning Gibbous"
+msgstr "እየቀነሰ የሚሄድ ከ ግማሽ በላይ በላይ "
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "የመጨረሻው ሩብ"
+
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "እየቀነሰ የሚሄድ ከ ግማሽ በታች"
+
 msgctxt "#32510"
 msgid "Warning"
 msgstr "ማስጠንቀቂያ "
 
+msgctxt "#32511"
+msgid "Watch"
+msgstr "ይጠንቀቁ"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "ይመከራሉ "
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "ባጠቃላይ "
+
 msgctxt "#32515"
 msgid "Forecast"
-msgstr "á\8c\8dá\88\9dá\89µ "
+msgstr "á\8b°á\88\98á\8a\93á\88\9b "
index 95cf00f..2cc24bf 100644 (file)
@@ -50,7 +50,7 @@ msgstr "Име за място 3"
 
 msgctxt "#32117"
 msgid "Location 1 id"
-msgstr "Идентификато на място 1"
+msgstr "Идентификатор на място 1"
 
 msgctxt "#32118"
 msgid "Location 2 id"
@@ -58,7 +58,7 @@ msgstr "Идентификато на място 2"
 
 msgctxt "#32119"
 msgid "Location 3 id"
-msgstr "Идентификато на място 3"
+msgstr "Идентификатор на място 3"
 
 msgctxt "#32120"
 msgid "Enable logging"
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Анимиране на картата"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Място 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Място 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Име за място 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Име за място 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Идентификатор на място 4"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Идентификатор на място 5"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Новолуние"
diff --git a/addons/weather.wunderground/resources/language/Burmese/strings.po b/addons/weather.wunderground/resources/language/Burmese/strings.po
new file mode 100644 (file)
index 0000000..5495890
--- /dev/null
@@ -0,0 +1,105 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Burmese (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/my/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: my\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "တည်နေရာ setup"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "တည်နေရာ ၁"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "တည်နေရာ ၂"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "တည်နေရာ ၃"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "တည်နေရာ ၁ ဖော်ပြထားသောအမည်"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "တည်နေရာ ၂ ဖော်ပြထားသောအမည်"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "တည်နေရာ ၃ ဖော်ပြထားသောအမည်"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "တည်နေရာ ၁ id"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "တည်နေရာ ၂ id"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "တည်နေရာ ၃ id"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "စနေနှင့်တနင်္ဂနွေ"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "စနေ၊တနင်္ဂနွေ"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "သောကြာ၊စနေ"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "ကြာသပတေး၊သောကြာ"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Map zoom level"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "လ အသစ်"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "လပြည့်"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "သတိပေးချက်"
+
+msgctxt "#32511"
+msgid "Watch"
+msgstr "စောင့်ကြည့်မည်"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "ဖော်ပြချက်"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "Outlook"
+
+msgctxt "#32515"
+msgid "Forecast"
+msgstr "ခန့်မှန်းချက်"
index a42819c..e1cc1e9 100644 (file)
@@ -16,14 +16,126 @@ msgstr ""
 "Language: ca\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "Configuració de la ubicació"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Opcions avançades"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "Ubicació 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "Ubicació 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "Ubicació 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "Nom a mostrar de la ubicació 1"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "Nom a mostrar de la ubicació 2"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "Nom a mostrar de la ubicació 3"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "Id de la ubicació 1"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "Id de la ubicació 2"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "Id de la ubicació 3"
+
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "Habilita el registre"
+
 msgctxt "#32121"
 msgid "Weekend"
 msgstr "Cap de setmana"
 
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "Dissabte/Diumenge"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "Divendres/Dissabte"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "Dijous/Divendres"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Nivell de zoom del mapa"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "Mapa animat"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Lluna nova"
+
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "Lluna nova visible"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Quart creixent"
+
+msgctxt "#32504"
+msgid "Waxing Gibbous"
+msgstr "Lluna gibosa creixent"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "Lluna plena"
+
+msgctxt "#32506"
+msgid "Waning Gibbous"
+msgstr "Lluna gibosa minvant"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Quart minvant"
+
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "Lluna minvant"
+
 msgctxt "#32510"
 msgid "Warning"
 msgstr "Advertència"
 
+msgctxt "#32511"
+msgid "Watch"
+msgstr "Veure"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "Advertència"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "Declaració"
+
 msgctxt "#32514"
 msgid "Outlook"
 msgstr "Outlook"
@@ -31,3 +143,7 @@ msgstr "Outlook"
 msgctxt "#32515"
 msgid "Forecast"
 msgstr "Predicció"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "Sinopsi"
index dc37d9d..13d8017 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "动态地图"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "地点4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "地点5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "地点4显示名称"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "地点5显示名称"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "地点4 ID"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "地点5 ID"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "新月"
index 48c9f85..1351db3 100644 (file)
@@ -18,11 +18,11 @@ msgstr ""
 
 msgctxt "#32101"
 msgid "Location setup"
-msgstr "Namjesti lokaciju"
+msgstr "Podešavanje lokacije"
 
 msgctxt "#32102"
 msgid "Advanced options"
-msgstr "Dodatne opcije"
+msgstr "Napredne mogućnosti"
 
 msgctxt "#32111"
 msgid "Location 1"
@@ -38,31 +38,31 @@ msgstr "Lokacija 3"
 
 msgctxt "#32114"
 msgid "Location 1 display name"
-msgstr "Lokacija 1 ime ekrana"
+msgstr "Naziv 1. lokacije"
 
 msgctxt "#32115"
 msgid "Location 2 display name"
-msgstr "Lokacija 2 ime ekrana"
+msgstr "Naziv 2. lokacije"
 
 msgctxt "#32116"
 msgid "Location 3 display name"
-msgstr "Lokacija 3 ime ekrana"
+msgstr "Naziv 3. lokacije"
 
 msgctxt "#32117"
 msgid "Location 1 id"
-msgstr "Lokacija 1 id"
+msgstr "ID lokacije 1"
 
 msgctxt "#32118"
 msgid "Location 2 id"
-msgstr "Lokacija 2 id"
+msgstr "ID lokacije 2"
 
 msgctxt "#32119"
 msgid "Location 3 id"
-msgstr "Lokacija 3 id"
+msgstr "ID lokacije 3"
 
 msgctxt "#32120"
 msgid "Enable logging"
-msgstr "Omogućiti prijave"
+msgstr "Omogući prijave"
 
 msgctxt "#32121"
 msgid "Weekend"
@@ -86,7 +86,31 @@ msgstr "Razina zumiranja karte"
 
 msgctxt "#32126"
 msgid "Animated map"
-msgstr "Animirane mape"
+msgstr "Animirana karta"
+
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Lokacija 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Lokacija 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Lokacija 4 prikaži naziv"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Lokacija 5 prikaži naziv"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Lokacija 4 ID"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Lokacija 5 ID"
 
 msgctxt "#32501"
 msgid "New Moon"
@@ -122,7 +146,7 @@ msgstr "Mlađak"
 
 msgctxt "#32510"
 msgid "Warning"
-msgstr "Obavjesti"
+msgstr "Upozorenje"
 
 msgctxt "#32511"
 msgid "Watch"
@@ -138,7 +162,7 @@ msgstr "Izvještaj"
 
 msgctxt "#32514"
 msgid "Outlook"
-msgstr "Izgledi"
+msgstr "Prognoza"
 
 msgctxt "#32515"
 msgid "Forecast"
index 2cf2d7b..b92637b 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Animovaná mapa"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Umístění 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Umístění 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Zobrazovaný název umístění 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Zobrazovaný název umístění 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "ID umístění 4"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "ID umístění 5"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Novoluní"
index 84046fb..e2030e1 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Geanimeerde kaart"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Locatie 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Locatie 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Locatie 4 weergave naam"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Locatie 5 weergave naam"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Locatie 4 id"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Locatie 5 id"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Nieuwe maan"
diff --git a/addons/weather.wunderground/resources/language/English (US)/strings.po b/addons/weather.wunderground/resources/language/English (US)/strings.po
deleted file mode 100644 (file)
index 5e16840..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# XBMC Media Center language file
-# Addon Name: Weather Underground
-# Addon id: weather.wunderground
-# Addon version: 0.0.9
-# Addon Provider: Team XBMC
-msgid ""
-msgstr ""
-"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
-"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
-"POT-Creation-Date: 2012-05-28 15:38+0000\n"
-"PO-Revision-Date: 2012-05-28 23:42+0000\n"
-"Last-Translator: XBMC Translation Team\n"
-"Language-Team: English (United States) (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/en_US/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: en_US\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgctxt "#30101"
-msgid "Location Setup"
-msgstr ""
-
-msgctxt "#30111"
-msgid "Change location 1"
-msgstr ""
-
-msgctxt "#30112"
-msgid "Change location 2"
-msgstr ""
-
-msgctxt "#30113"
-msgid "Change location 3"
-msgstr ""
index 3f243c8..2f2d14a 100644 (file)
@@ -90,7 +90,31 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr ""
 
-#empty strings from id 32127 to 32500
+msgctxt "#32127"
+msgid "Location 4"
+msgstr ""
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr ""
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr ""
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr ""
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr ""
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr ""
+
+#empty strings from id 32133 to 32500
 
 msgctxt "#32501"
 msgid "New Moon"
diff --git a/addons/weather.wunderground/resources/language/Faroese/strings.po b/addons/weather.wunderground/resources/language/Faroese/strings.po
new file mode 100644 (file)
index 0000000..770f7e3
--- /dev/null
@@ -0,0 +1,137 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Faroese (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/fo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "Uppseting av stað"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Víðkaðar stillingar"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "Stað 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "Stað 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "Stað 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "Heiti á stað 1"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "Heiti á stað 2"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "Heiti á stað 3"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "Stað 1 id"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "Stað 2 id"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "Stað 3 id"
+
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "Tendra log"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "Vikuskifti"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "Leygardagur/Sunnudagur"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "Fríggjadagur/Leygardagur"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "Hósdagur/Fríggjadagur"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Stødd á korti"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "Livandi kort"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Nýmáni (tendring)"
+
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "Hálvmáni"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Fyrsti fjórðingur"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "Fullmáni (full sól)"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Seinni fjórðingur"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Ávarðing"
+
+msgctxt "#32511"
+msgid "Watch"
+msgstr "Hygg"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "Vegleiðing"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "Frágreiðing"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "Útlit"
+
+msgctxt "#32515"
+msgid "Forecast"
+msgstr "Forsøgn"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "Samandráttur"
index 3faa1ca..01ea748 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Carte animée"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Emplacement 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Emplacement 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Nom de l'emplacement 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Nom de l'emplacement 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Identifiant emplacement 4"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Identifiant emplacement 5"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Nouvelle Lune"
index 4ce0263..347248d 100644 (file)
@@ -98,11 +98,11 @@ msgstr "Erstes Viertel"
 
 msgctxt "#32503"
 msgid "First Quarter"
-msgstr "Erstes Quartal"
+msgstr "Zunehmender Halbmond"
 
 msgctxt "#32504"
 msgid "Waxing Gibbous"
-msgstr "Zweites Viertel"
+msgstr "Zunehmender Mond"
 
 msgctxt "#32505"
 msgid "Full Moon"
@@ -110,11 +110,11 @@ msgstr "Vollmond"
 
 msgctxt "#32506"
 msgid "Waning Gibbous"
-msgstr "Drittes Viertel"
+msgstr "Abnehmender Mond"
 
 msgctxt "#32507"
 msgid "Last Quarter"
-msgstr "Letztes Quartal"
+msgstr "Abnehmender Halbmond"
 
 msgctxt "#32508"
 msgid "Waning Crescent"
@@ -122,7 +122,7 @@ msgstr "Letztes Viertel"
 
 msgctxt "#32510"
 msgid "Warning"
-msgstr "Achtung"
+msgstr "Warnung"
 
 msgctxt "#32511"
 msgid "Watch"
@@ -138,7 +138,7 @@ msgstr "Bericht"
 
 msgctxt "#32514"
 msgid "Outlook"
-msgstr "Outlook"
+msgstr "Ausblick"
 
 msgctxt "#32515"
 msgid "Forecast"
index 04638a5..261ab76 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Εφέ χάρτη"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Τοποθεσία 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Τοποθεσία 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Ονομασία Τοποθεσίας 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Ονομασία Τοποθεσίας 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "ID Τοποθεσίας 4"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "ID Τοποθεσίας 5"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Νέα Σελήνη"
index 4ae45b2..ebbfcb0 100644 (file)
@@ -20,6 +20,10 @@ msgctxt "#32121"
 msgid "Weekend"
 msgstr "Helgi"
 
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Athugið"
+
 msgctxt "#32514"
 msgid "Outlook"
 msgstr "Veðurspá"
diff --git a/addons/weather.wunderground/resources/language/Indonesian/strings.po b/addons/weather.wunderground/resources/language/Indonesian/strings.po
new file mode 100644 (file)
index 0000000..ff3e6e0
--- /dev/null
@@ -0,0 +1,29 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Indonesian (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "Akhir Pekan"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Peringatan"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "Pandangan"
index 4995483..f25b807 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Mappa animata"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Località 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Località 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Località 4 mostra nome"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Località 5 mostra nome"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Località 4 id"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Località 5 id"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Novilunio"
index e9a94c5..669f18a 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Animowana mapa"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Lokalizacja 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Lokalizacja 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Wyświetlana nazwa lokalizacji 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Wyświetlana nazwa lokalizacji 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Lokalizacja 4 id"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Lokalizacja 5 id"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Księżyc w nowiu"
index 8ab99a9..96ab91b 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Mapa animado"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Localização 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Localização 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Nome a exibir de localização 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Nome a exibir de localização 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Id de localização 4"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Id de localização 5"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Lua Nova"
index 1243189..8f9cdf6 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Mapa animado"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Ubicación 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Ubicación 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Nombre a mostrar para ubicación 4"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Nombre a mostrar para ubicación 5"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Id de ubicación 4"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Id de ubicación 5"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Luna nueva"
index 866359c..ace068d 100644 (file)
@@ -88,6 +88,30 @@ msgctxt "#32126"
 msgid "Animated map"
 msgstr "Animerad karta"
 
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "Plats 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "Plats 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "Plats 4 visningsnamn"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "Plats 5 visningsnamn"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "Plats 4 id"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "Plats 5 id"
+
 msgctxt "#32501"
 msgid "New Moon"
 msgstr "Nymåne"
diff --git a/addons/weather.wunderground/resources/language/Tamil (India)/strings.po b/addons/weather.wunderground/resources/language/Tamil (India)/strings.po
new file mode 100644 (file)
index 0000000..fa9b06a
--- /dev/null
@@ -0,0 +1,173 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Tamil (India) (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/ta_IN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ta_IN\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "இருப்பிடம் அமைப்பு"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "கூடுதல் விருப்பங்கள்"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "இருப்பிடம் 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "இருப்பிடம் 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "இருப்பிடம் 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "இருப்பிடம் 1 காட்சி பெயர்"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "இருப்பிடம் 2 காட்சி பெயர்"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "இருப்பிடம் 3 காட்சி பெயர்"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "இருப்பிடம் 1 எண்"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "இருப்பிடம் 2 எண்"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "இருப்பிடம் 3 எண்"
+
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "பதிவெடுத்தலை செயல்படுத்து"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "வார இறுதி"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "சனி/ஞாயிறு"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "வெள்ளி/சனி"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "வியாழன்/வெள்ளி"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "நிலப்படம் பெரிதாக்கு நிலை"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "அசைவூட்டபட்ட நிலப்படம்"
+
+msgctxt "#32127"
+msgid "Location 4"
+msgstr "இருப்பிடம் 4"
+
+msgctxt "#32128"
+msgid "Location 5"
+msgstr "இருப்பிடம் 5"
+
+msgctxt "#32129"
+msgid "Location 4 display name"
+msgstr "இருப்பிடம் 4 காட்சி பெயர்"
+
+msgctxt "#32130"
+msgid "Location 5 display name"
+msgstr "இருப்பிடம் 5 காட்சி பெயர்"
+
+msgctxt "#32131"
+msgid "Location 4 id"
+msgstr "இருப்பிடம் 4 எண்"
+
+msgctxt "#32132"
+msgid "Location 5 id"
+msgstr "இருப்பிடம் 5 எண்"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "அமாவாசை"
+
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "வளர்பிறை"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "முதல் கால்பகுதி"
+
+msgctxt "#32504"
+msgid "Waxing Gibbous"
+msgstr "வளர்பிறை"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "பௌர்ணமி"
+
+msgctxt "#32506"
+msgid "Waning Gibbous"
+msgstr "தேய்பிறை"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "கடைசி கால்பகுதி"
+
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "தேய்பிறை"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "எச்சரிக்கை"
+
+msgctxt "#32511"
+msgid "Watch"
+msgstr "கண்காணிப்பு"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "ஆலோசனை"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "கூற்று"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "கண்ணோட்டம்"
+
+msgctxt "#32515"
+msgid "Forecast"
+msgstr "முன் அறிவிப்பு"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "தொகுப்பு"
index 4a26db5..97d7ee9 100644 (file)
@@ -116,6 +116,10 @@ msgctxt "#32507"
 msgid "Last Quarter"
 msgstr "Son Dördün"
 
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "Hilal"
+
 msgctxt "#32510"
 msgid "Warning"
 msgstr "Uyarı"
@@ -124,6 +128,14 @@ msgctxt "#32511"
 msgid "Watch"
 msgstr "İzle"
 
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "Öneri"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "Açıklama"
+
 msgctxt "#32514"
 msgid "Outlook"
 msgstr "Outlook"
@@ -131,3 +143,7 @@ msgstr "Outlook"
 msgctxt "#32515"
 msgid "Forecast"
 msgstr "Hava Tahmini"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "Özet"
index 382b111..77b6121 100644 (file)
@@ -16,10 +16,86 @@ msgstr ""
 "Language: uk\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "Налаштування місцевості"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Додаткові налаштування"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "Місцевість 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "Місцевість 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "Місцевість 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "Назва для показу Місцевості 1 "
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "Назва для показу Місцевості 2 "
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "Назва для показу Місцевості 3 "
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "Ідентифікація Місцевості 1 "
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "Ідентифікація Місцевості 2 "
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "Ідентифікація Місцевості 3 "
+
 msgctxt "#32121"
 msgid "Weekend"
 msgstr "Вихідні"
 
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "Субота/Неділя"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "П’ятниця/Субота"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Ступінь збільшення мапи"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "Анімована мапа"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Новий місяць"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Перша чверть"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "Повний місяць"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Остання чверть"
+
 msgctxt "#32510"
 msgid "Warning"
 msgstr "Увага"
diff --git a/addons/weather.wunderground/resources/language/Uzbek/strings.po b/addons/weather.wunderground/resources/language/Uzbek/strings.po
new file mode 100644 (file)
index 0000000..b8def18
--- /dev/null
@@ -0,0 +1,73 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Uzbek (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/uz/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uz\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "O'rnashgan joy moslamalari"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Qo'shimcha parametrlar"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "O'rnashgan joy 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "O'rnashgan joy 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "O'rnashgan joy 3"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "Dam olish kunlari"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "Shanba/Yakshanba"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "Juma/Shanba"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "Payshanba/Juma"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Yangi oy"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Birinchi chorak"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "To'lgan oy"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Oxirgi chorak"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Ogohlantirish"
diff --git a/addons/weather.wunderground/resources/language/Vietnamese/strings.po b/addons/weather.wunderground/resources/language/Vietnamese/strings.po
new file mode 100644 (file)
index 0000000..3413d81
--- /dev/null
@@ -0,0 +1,149 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Vietnamese (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "Thiết lập Chổ"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Các chức năng nâng cao"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "Chổ 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "Chổ 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "Chổ 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "Hiển thị tên của Chổ 1"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "Hiển thị tên của Chổ 2"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "Hiển thị tên của Chổ 3"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "Mã địa điểm 1"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "Mã địa điểm 2"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "Mã địa điểm 3"
+
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "Lưu lại báo cáo"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "Cuối tuần"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "Thứ bảy/Chủ Nhật"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "Thứ sáu/Thứ bảy"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "Thứ năm/Thứ sáu"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Bản đồ mức độ phóng"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "Bản đồ di chuyển"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Tuần trăng mới"
+
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "Trăng lưỡi liềm"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Quý đầu tiên"
+
+msgctxt "#32504"
+msgid "Waxing Gibbous"
+msgstr "Trăng khuyết"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "Trăng tròn"
+
+msgctxt "#32506"
+msgid "Waning Gibbous"
+msgstr "Trăng khuyết"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Quý cuối cùng"
+
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "Trăng lưỡi liềm"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Cảnh báo"
+
+msgctxt "#32511"
+msgid "Watch"
+msgstr "Xem"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "Lời khuyên"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "Báo cáo"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "Toàn cảnh"
+
+msgctxt "#32515"
+msgid "Forecast"
+msgstr "Dự báo"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "Tóm tắt"
diff --git a/addons/weather.wunderground/resources/language/Welsh/strings.po b/addons/weather.wunderground/resources/language/Welsh/strings.po
new file mode 100644 (file)
index 0000000..85c81a6
--- /dev/null
@@ -0,0 +1,149 @@
+# XBMC Media Center language file
+# Addon Name: Weather Underground
+# Addon id: weather.wunderground
+# Addon Provider: Team XBMC
+msgid ""
+msgstr ""
+"Project-Id-Version: XBMC Main Translation Project (Frodo)\n"
+"Report-Msgid-Bugs-To: http://trac.xbmc.org/\n"
+"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: XBMC Translation Team\n"
+"Language-Team: Welsh (http://www.transifex.com/projects/p/XBMC-Main-Frodo/language/cy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cy\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
+
+msgctxt "#32101"
+msgid "Location setup"
+msgstr "Gosod y lleoliad"
+
+msgctxt "#32102"
+msgid "Advanced options"
+msgstr "Dewisiadau uwch"
+
+msgctxt "#32111"
+msgid "Location 1"
+msgstr "Lleoliad 1"
+
+msgctxt "#32112"
+msgid "Location 2"
+msgstr "Lleoliad 2"
+
+msgctxt "#32113"
+msgid "Location 3"
+msgstr "Lleoliad 3"
+
+msgctxt "#32114"
+msgid "Location 1 display name"
+msgstr "Enw Dangos Lleoliad 1"
+
+msgctxt "#32115"
+msgid "Location 2 display name"
+msgstr "Enw Dangos Lleoliad 2"
+
+msgctxt "#32116"
+msgid "Location 3 display name"
+msgstr "Enw Dangos Lleoliad 3"
+
+msgctxt "#32117"
+msgid "Location 1 id"
+msgstr "Dynodiad Lleoliad 1"
+
+msgctxt "#32118"
+msgid "Location 2 id"
+msgstr "Dynodiad Lleoliad 2"
+
+msgctxt "#32119"
+msgid "Location 3 id"
+msgstr "Dynodiad Lleoliad 3"
+
+msgctxt "#32120"
+msgid "Enable logging"
+msgstr "Galluogi cofnodi"
+
+msgctxt "#32121"
+msgid "Weekend"
+msgstr "Penwythnos"
+
+msgctxt "#32122"
+msgid "Saturday/Sunday"
+msgstr "Sadwrn/Sul"
+
+msgctxt "#32123"
+msgid "Friday/Saturday"
+msgstr "Gwener/Sadwrn"
+
+msgctxt "#32124"
+msgid "Thursday/Friday"
+msgstr "Iau/Gwener"
+
+msgctxt "#32125"
+msgid "Map zoom level"
+msgstr "Lefel chwyddo map"
+
+msgctxt "#32126"
+msgid "Animated map"
+msgstr "Map wedi ei animeiddio"
+
+msgctxt "#32501"
+msgid "New Moon"
+msgstr "Lleuad Newydd"
+
+msgctxt "#32502"
+msgid "Waxing Crescent"
+msgstr "Lleuad ar ei Chynnydd"
+
+msgctxt "#32503"
+msgid "First Quarter"
+msgstr "Chwarter Cyntaf"
+
+msgctxt "#32504"
+msgid "Waxing Gibbous"
+msgstr "Cynnydd Lleuad Amgrwn"
+
+msgctxt "#32505"
+msgid "Full Moon"
+msgstr "Lleuad Llawn"
+
+msgctxt "#32506"
+msgid "Waning Gibbous"
+msgstr "Ciliad Lleuad Amgrwn"
+
+msgctxt "#32507"
+msgid "Last Quarter"
+msgstr "Chwarter Olaf"
+
+msgctxt "#32508"
+msgid "Waning Crescent"
+msgstr "Ciliad Cilgant Lleuad"
+
+msgctxt "#32510"
+msgid "Warning"
+msgstr "Rhybudd"
+
+msgctxt "#32511"
+msgid "Watch"
+msgstr "Gwylio"
+
+msgctxt "#32512"
+msgid "Advisory"
+msgstr "Awgrymiad"
+
+msgctxt "#32513"
+msgid "Statement"
+msgstr "Datganiad"
+
+msgctxt "#32514"
+msgid "Outlook"
+msgstr "Rhagolygon"
+
+msgctxt "#32515"
+msgid "Forecast"
+msgstr "Rhagolygon"
+
+msgctxt "#32516"
+msgid "Synopsis"
+msgstr "Crynodeb"
index 82a66bc..0f5bbbe 100644 (file)
@@ -8,11 +8,15 @@ __language__ = sys.modules[ "__main__" ].__language__
 #http://www.wunderground.com/weather/api/d/docs?d=language-support
         # xbmc lang name         # wu code
 LANG = { 'afrikaans'             : 'AF',
+         'albanian'              : 'AL',
+         'amharic'               : 'EN', # AM is n/a, use AR or EN? 
          'arabic'                : 'AR',
+         'azerbaijani'           : 'AZ',
          'basque'                : 'EU',
          'belarusian'            : 'BY',
          'bosnian'               : 'CR', # BS is n/a, use CR or SR? 
          'bulgarian'             : 'BU',
+         'burmese'               : 'MY',
          'catalan'               : 'CA',
          'chinese (simple)'      : 'CN',
          'chinese (traditional)' : 'TW',
@@ -24,6 +28,7 @@ LANG = { 'afrikaans'             : 'AF',
          'english (us)'          : 'EN',
          'esperanto'             : 'EO',
          'estonian'              : 'ET',
+         'faroese'               : 'DK', # FO is n/a, use DK
          'finnish'               : 'FI',
          'french'                : 'FR',
          'galician'              : 'GZ',
@@ -37,10 +42,16 @@ LANG = { 'afrikaans'             : 'AF',
          'italian'               : 'IT',
          'japanese'              : 'JP',
          'korean'                : 'KR',
+         'latvian'               : 'LV',
          'lithuanian'            : 'LT',
          'macedonian'            : 'MK',
+         'malay'                 : 'EN', # MS is n/a, use EN
+         'malayalam'             : 'EN', # ML is n/a, use EN
          'maltese'               : 'MT',
          'norwegian'             : 'NO',
+         'ossetic'               : 'EN', # OS is n/a, use EN
+         'persian'               : 'FA',
+         'persian (iran)'        : 'FA',
          'polish'                : 'PL',
          'portuguese'            : 'BR',
          'portuguese (brazil)'   : 'BR',
@@ -54,9 +65,14 @@ LANG = { 'afrikaans'             : 'AF',
          'spanish (argentina)'   : 'SP',
          'spanish (mexico)'      : 'SP',
          'swedish'               : 'SW',
+         'tamil (india)'         : 'EN', # TA is n/a, use EN
          'thai'                  : 'TH',
          'turkish'               : 'TU',
-         'ukrainian'             : 'UA'}
+         'ukrainian'             : 'UA',
+         'uzbek'                 : 'UZ',
+         'vietnamese'            : 'VU',
+         'vietnamese (viet nam)' : 'VU',
+         'welsh'                 : 'CY'}
 
 WEATHER_CODES = { 'chanceflurries'    : '41',
                   'chancerain'        : '39',
index 809b583..f69f1e2 100644 (file)
@@ -1,9 +1,10 @@
 # -*- coding: utf-8 -*-
 
-import urllib2, base64
+import urllib2, gzip, base64
+from StringIO import StringIO
 
 WAIK             = 'NDEzNjBkMjFkZjFhMzczNg=='
-WUNDERGROUND_URL = 'http://api.wunderground.com/api/KEY/%s/%s/q/%s.%s'
+WUNDERGROUND_URL = 'http://api.wunderground.com/api/%s/%s/%s/q/%s.%s'
 API_EXCLUDE      = ['hourly10day', 'yesterday', 'planner', 'webcams', 'animatedradar', 'animatedsatellite', 'currenthurricane']
 
 def wundergroundapi(features, settings, query, format):
@@ -33,12 +34,18 @@ def wundergroundapi(features, settings, query, format):
             return 'api access to %s restricted' % item
     if not settings:
         settings = 'lang:EN'
-    query = WUNDERGROUND_URL % (features, settings, query, format)
-    url = query.replace('KEY',(base64.b64decode(WAIK)[::-1]),1)
+    url = WUNDERGROUND_URL % (base64.b64decode(WAIK)[::-1], features, settings, query, format)
     try:
-        req = urllib2.urlopen(url)
-        response = req.read()
-        req.close()
+        req = urllib2.Request(url)
+        req.add_header('Accept-encoding', 'gzip')
+        response = urllib2.urlopen(req)
+        if response.info().get('Content-Encoding') == 'gzip':
+            buf = StringIO(response.read())
+            compr = gzip.GzipFile(fileobj=buf)
+            data = compr.read()
+        else:
+            data = response.read()
+        response.close()
     except:
-        response = ''
-    return response
+        data = ''
+    return data
index 33dfdd5..6318c21 100644 (file)
@@ -4,9 +4,13 @@
                <setting id="Location1" label="32111" type="action" action="RunScript($ID,Location1)" default=""/>
                <setting id="Location2" label="32112" type="action" action="RunScript($ID,Location2)" enable="!eq(-1,)" default=""/>
                <setting id="Location3" label="32113" type="action" action="RunScript($ID,Location3)" enable="!eq(-1,)" default=""/>
+               <setting id="Location4" label="32127" type="action" action="RunScript($ID,Location4)" enable="!eq(-1,)" default=""/>
+               <setting id="Location5" label="32128" type="action" action="RunScript($ID,Location5)" enable="!eq(-1,)" default=""/>
                <setting id="Location1id" type="text" visible="false" default=""/>
                <setting id="Location2id" type="text" visible="false" default=""/>
                <setting id="Location3id" type="text" visible="false" default=""/>
+               <setting id="Location4id" type="text" visible="false" default=""/>
+               <setting id="Location5id" type="text" visible="false" default=""/>
        </category>
        <category label="32102">
                <setting id="Location1" label="32114" type="text" default=""/>
                <setting id="Location3" label="32116" type="text" enable="!eq(-3,)" default=""/>
                <setting id="Location3id" label="32119" type="text" subsetting="true" enable="!eq(-3,)" default=""/>
                <setting type="sep"/>
+               <setting id="Location4" label="32129" type="text" enable="!eq(-3,)" default=""/>
+               <setting id="Location4id" label="32131" type="text" subsetting="true" enable="!eq(-3,)" default=""/>
+               <setting type="sep"/>
+               <setting id="Location5" label="32130" type="text" enable="!eq(-3,)" default=""/>
+               <setting id="Location5id" label="32132" type="text" subsetting="true" enable="!eq(-3,)" default=""/>
+               <setting type="sep"/>
                <setting id="Zoom" label="32125" type="slider" option="int" range="1,100"  default="10"/>
                <setting id="Animate" label="32126" type="bool" default="false"/>
                <setting id="Weekend" label="32121" type="enum" lvalues="32122|32123|32124" default="0"/>
index 5e4cce6..2e145c5 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<addon id="xbmc.addon" version="12.9.5" provider-name="Team XBMC">
+<addon id="xbmc.addon" version="12.9.6" provider-name="Team XBMC">
   <backwards-compatibility abi="12.0"/>
   <requires>
     <import addon="xbmc.core" version="0.1.0"/>
index e6658b6..46ec31f 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT([xbmc], [12.9.5], [http://trac.xbmc.org])
+AC_INIT([xbmc], [12.9.6], [http://trac.xbmc.org])
 AC_CONFIG_HEADERS([xbmc/config.h])
 AH_TOP([#pragma once])
 m4_include([m4/ax_python_devel.m4])
index cf52a14..8a439d5 100644 (file)
@@ -64,8 +64,8 @@ public:
   virtual void avcodec_register_all(void)=0;
   virtual void avcodec_flush_buffers(AVCodecContext *avctx)=0;
   virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options)=0;
-  virtual AVCodec *avcodec_find_decoder(enum CodecID id)=0;
-  virtual AVCodec *avcodec_find_encoder(enum CodecID id)=0;
+  virtual AVCodec *avcodec_find_decoder(enum AVCodecID id)=0;
+  virtual AVCodec *avcodec_find_encoder(enum AVCodecID id)=0;
   virtual int avcodec_close_dont_call(AVCodecContext *avctx)=0;
   virtual AVFrame *avcodec_alloc_frame(void)=0;
   virtual int avpicture_fill(AVPicture *picture, uint8_t *ptr, PixelFormat pix_fmt, int width, int height)=0;
@@ -124,8 +124,8 @@ public:
   }
   virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; }
   virtual int avcodec_close_dont_call(AVCodecContext *avctx) { *(volatile int *)0x0 = 0; return 0; }
-  virtual AVCodec *avcodec_find_decoder(enum CodecID id) { return ::avcodec_find_decoder(id); }
-  virtual AVCodec *avcodec_find_encoder(enum CodecID id) { return ::avcodec_find_encoder(id); }
+  virtual AVCodec *avcodec_find_decoder(enum AVCodecID id) { return ::avcodec_find_decoder(id); }
+  virtual AVCodec *avcodec_find_encoder(enum AVCodecID id) { return ::avcodec_find_encoder(id); }
   virtual int avcodec_close(AVCodecContext *avctx)
   {
     CSingleLock lock(DllAvCodec::m_critSection);
@@ -202,8 +202,8 @@ class DllAvCodec : public DllDynamic, DllAvCodecInterface
   LOAD_SYMBOLS();
 
   DEFINE_METHOD0(void, avcodec_register_all_dont_call)
-  DEFINE_METHOD1(AVCodec*, avcodec_find_decoder, (enum CodecID p1))
-  DEFINE_METHOD1(AVCodec*, avcodec_find_encoder, (enum CodecID p1))
+  DEFINE_METHOD1(AVCodec*, avcodec_find_decoder, (enum AVCodecID p1))
+  DEFINE_METHOD1(AVCodec*, avcodec_find_encoder, (enum AVCodecID p1))
   DEFINE_METHOD1(int, avcodec_close_dont_call, (AVCodecContext *p1))
   DEFINE_METHOD0(AVFrame*, avcodec_alloc_frame)
   DEFINE_METHOD5(int, avpicture_fill, (AVPicture *p1, uint8_t *p2, PixelFormat p3, int p4, int p5))
index 11e9234..0c38351 100644 (file)
@@ -45,10 +45,12 @@ extern "C" {
   #include <libavfilter/avfiltergraph.h>
   #include <libavfilter/buffersink.h>
   #include <libavfilter/avcodec.h>
+  #include <libavfilter/buffersrc.h>
 #else
   #include "libavfilter/avfiltergraph.h"
   #include "libavfilter/buffersink.h"
   #include "libavfilter/avcodec.h"
+  #include "libavfilter/buffersrc.h"
 #endif
 }
 
index e39931d..34081d9 100644 (file)
@@ -113,8 +113,7 @@ DLLEXPORT char* XBMC_get_dvd_menu_language(void *hdl, void* cb)
   if (cb == NULL)
     return "";
 
-  string buffer = ((CB_AddOnLib*)cb)->GetDVDMenuLanguage(((AddonCB*)hdl)->addonData);
-  return strdup(buffer.c_str());
+  return ((CB_AddOnLib*)cb)->GetDVDMenuLanguage(((AddonCB*)hdl)->addonData);
 }
 
 DLLEXPORT void XBMC_free_string(void* hdl, void* cb, char* str)
index ffafd1a..c068aa7 100644 (file)
@@ -2,8 +2,8 @@
 <!-- BEGIN_INCLUDE(manifest) -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.xbmc.xbmc"
-    android:versionCode="11"
-    android:versionName="13.0-ALPHA5" >
+    android:versionCode="12"
+    android:versionName="13.0-ALPHA6" >
 
     <!-- This is the platform API where NativeActivity was introduced. -->
     <uses-sdk android:minSdkVersion="14" />
index 23391e4..8270a42 100644 (file)
@@ -85,7 +85,7 @@ public class Helper
     Node doc = null
     def ret = ''
 
-    // make the class name or namespave
+    // make the class name or namespace
     String doxygenId = findFullClassName(methodOrClass,'_1_1')
     boolean isInClass = doxygenId != null
     if (!doxygenId)
@@ -107,7 +107,7 @@ public class Helper
     {
       Node memberdef = docspec.depthFirst().find { 
         return (it instanceof String) ? false :
-          ((it.name() == 'memberdef' && it.@kind == 'function' && it.@id.startsWith(doxygenId)) &&
+          ((it.name() == 'memberdef' && (it.@kind == 'function' || it.@kind == 'variable') && it.@id.startsWith(doxygenId)) &&
            (it.name != null && it.name.text().trim() == methodOrClass.@sym_name))
       }
 
@@ -487,6 +487,19 @@ public class Helper
              new Node(it,'doc',['value' : doc])
          }
       }
+      
+      // now remove all non-public variables
+      List allVariables = ret.depthFirst().findAll({ it.name() == 'variable' })
+      allVariables.each {
+         if (it.@access != null && it.@access != 'public')
+            it.parent().remove(it)
+         else
+         {
+           def doc = retrieveDocStringFromDoxygen(it)
+           if (doc != null && doc != '' && doc.trim() != ' ')
+             new Node(it,'doc',['value' : doc])
+         }
+      }
 
       // add the doc string to the classes
       List allClasses = ret.depthFirst().findAll({ it.name() == 'class'})
index 416ef51..252c79d 100755 (executable)
@@ -45,7 +45,7 @@ fi
 PACKAGE=org.xbmc.xbmc-atv2
 
 VERSION=13.0
-REVISION=0~alpha5
+REVISION=0~alpha6
 ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_iphoneos-arm.deb
 
 echo Creating $PACKAGE package version $VERSION revision $REVISION
index 02902ff..0ff3930 100755 (executable)
@@ -46,7 +46,7 @@ fi
 PACKAGE=org.xbmc.xbmc-ios
 
 VERSION=13.0
-REVISION=0~alpha5
+REVISION=0~alpha6
 ARCHIVE=${PACKAGE}_${VERSION}-${REVISION}_iphoneos-arm.deb
 
 echo Creating $PACKAGE package version $VERSION revision $REVISION
index 36c2f39..271873e 100644 (file)
@@ -28,6 +28,7 @@ $(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS)
        cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE)
        cd $(PLATFORM); patch -p0 < ../prefix.patch
        cd $(PLATFORM); patch -p1 < ../librtmp-60-second-fix.patch
+       cd $(PLATFORM)/librtmp; patch -p0 < ../../libm.patch
        sed -i -e 's|CC=|#CC=|' $(PLATFORM)/librtmp/Makefile
        sed -i -e 's|LD=|#LD=|' $(PLATFORM)/librtmp/Makefile
        sed -i -e 's|AR=|#AR=|' $(PLATFORM)/librtmp/Makefile
diff --git a/tools/depends/target/librtmp/libm.patch b/tools/depends/target/librtmp/libm.patch
new file mode 100644 (file)
index 0000000..d86485b
--- /dev/null
@@ -0,0 +1,11 @@
+--- Makefile.old       2013-06-04 17:35:58.000000000 +0200
++++ Makefile   2013-06-04 17:36:13.000000000 +0200
+@@ -25,7 +25,7 @@
+ REQ_GNUTLS=gnutls
+ REQ_OPENSSL=libssl,libcrypto
+ LIBZ=-lz
+-LIBS_posix=
++LIBS_posix=-lm
+ LIBS_darwin=
+ LIBS_mingw=-lws2_32 -lwinmm -lgdi32
+ LIB_GNUTLS=-lgnutls -lhogweed -lnettle -lgmp $(LIBZ)
index d4932d3..e185fa4 100644 (file)
@@ -2483,8 +2483,12 @@ bool CApplication::OnAction(const CAction &action)
   }
 
   // Now check with the player if action can be handled.
-  if (m_pPlayer != NULL && m_pPlayer->OnAction(action))
-    return true;
+  if (g_windowManager.GetActiveWindow() == WINDOW_FULLSCREEN_VIDEO ||
+      (g_windowManager.GetActiveWindow() == WINDOW_DIALOG_VIDEO_OSD && (action.GetID() == ACTION_NEXT_ITEM || action.GetID() == ACTION_PREV_ITEM || action.GetID() == ACTION_CHANNEL_UP || action.GetID() == ACTION_CHANNEL_DOWN)))
+  {
+    if (m_pPlayer != NULL && m_pPlayer->OnAction(action))
+      return true;
+  }
 
   // stop : stops playing current audio song
   if (action.GetID() == ACTION_STOP)
index 4f9b2f9..e8b440a 100644 (file)
@@ -487,7 +487,7 @@ namespace INFO
 
 #define VERSION_MAJOR 13
 #define VERSION_MINOR 0
-#define VERSION_TAG "-ALPHA5"
+#define VERSION_TAG "-ALPHA6"
 
 #define LISTITEM_START              35000
 #define LISTITEM_THUMB              (LISTITEM_START)
index afaaf1e..9234a38 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "ApplicationInfo.h"
 #include "jutils/jutils-details.hpp"
 
 using namespace jni;
 
 CJNIApplicationInfo::CJNIApplicationInfo(const jhobject &object) : CJNIBase(object)
-  ,sourceDir(jcast<std::string>(get_field<jhstring>(m_object, "sourceDir")))
-  ,publicSourceDir(jcast<std::string>(get_field<jhstring>(m_object, "publicSourceDir")))
-  ,dataDir(jcast<std::string>(get_field<jhstring>(m_object, "dataDir")))
+  ,sourceDir(       jcast<std::string>(get_field<jhstring>(m_object, "sourceDir")))
+  ,publicSourceDir( jcast<std::string>(get_field<jhstring>(m_object, "publicSourceDir")))
+  ,dataDir(         jcast<std::string>(get_field<jhstring>(m_object, "dataDir")))
   ,nativeLibraryDir(jcast<std::string>(get_field<jhstring>(m_object, "nativeLibraryDir")))
-  ,packageName(jcast<std::string>(get_field<jhstring>(m_object, "packageName")))
-  ,uid(get_field<int>(m_object, "uid"))
+  ,packageName(     jcast<std::string>(get_field<jhstring>(m_object, "packageName")))
+  ,uid(             get_field<int>(m_object, "uid"))
   ,targetSdkVersion(get_field<int>(m_object, "targetSdkVersion"))
-  ,enabled(get_field<jboolean>(m_object, "enabled"))
+  ,enabled(         get_field<jboolean>(m_object, "enabled"))
 {
 }
index ccc2607..7e42107 100644 (file)
@@ -18,6 +18,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIApplicationInfo : public CJNIBase
@@ -31,11 +32,12 @@ public:
   std::string dataDir;
   std::string nativeLibraryDir;
   std::string packageName;
-  int uid; 
-  int targetSdkVersion;
-  bool enabled;
+  int         uid; 
+  int         targetSdkVersion;
+  bool        enabled;
 
 private:
   CJNIApplicationInfo();
 };
+
 typedef std::vector<CJNIApplicationInfo> CJNIApplicationInfos;
index 398d80c..597c85b 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "AudioManager.h"
 #include "jutils/jutils-details.hpp"
 
@@ -27,15 +28,19 @@ int CJNIAudioManager::STREAM_MUSIC(0);
 void CJNIAudioManager::PopulateStaticFields()
 {
   jhclass clazz = find_class("android/media/AudioManager");
-  STREAM_MUSIC = (get_static_field<int>(clazz, "STREAM_MUSIC"));
+  STREAM_MUSIC  = (get_static_field<int>(clazz, "STREAM_MUSIC"));
 }
 
 int CJNIAudioManager::getStreamMaxVolume()
 {
-  return call_method<jint>(m_object, "getStreamMaxVolume", "(I)I", STREAM_MUSIC);
+  return call_method<jint>(m_object,
+    "getStreamMaxVolume", "(I)I",
+    STREAM_MUSIC);
 }
 
 void CJNIAudioManager::setStreamVolume(int index /* 0 */, int flags /* NONE */)
 {
-  call_method<void>(m_object, "setStreamVolume", "(III)V", STREAM_MUSIC, index, flags);
+  call_method<void>(m_object,
+    "setStreamVolume", "(III)V",
+    STREAM_MUSIC, index, flags);
 }
index e9f7408..a759cd0 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIAudioManager : public CJNIBase
 {
 public:
+  CJNIAudioManager(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIAudioManager() {};
+
   // Note removal of streamType param.
-  int getStreamMaxVolume();
+  int  getStreamMaxVolume();
   void setStreamVolume(int index = 0, int flags = 0);
 
   static void PopulateStaticFields();
-  ~CJNIAudioManager(){};
-  CJNIAudioManager(const jni::jhobject &object) : CJNIBase(object){};
 
 private:
   CJNIAudioManager();
+
   static int STREAM_MUSIC;
 };
index c466b26..5bb7cc1 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "BaseColumns.h"
 #include "jutils/jutils-details.hpp"
 
@@ -28,6 +29,6 @@ std::string CJNIBaseColumns::_COUNT;
 void CJNIBaseColumns::PopulateStaticFields()
 {
   jhclass clazz = find_class("android/provider/BaseColumns");
-  _ID = (jcast<std::string>(get_static_field<jhstring>(clazz, "_ID")));
+  _ID    = (jcast<std::string>(get_static_field<jhstring>(clazz, "_ID")));
   _COUNT = (jcast<std::string>(get_static_field<jhstring>(clazz, "_COUNT")));
 }
index b60a434..e31659f 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include <string>
+
 class CJNIBaseColumns
 {
 public:
+  static void PopulateStaticFields();
+
   static std::string _ID;
   static std::string _COUNT;
-  static void PopulateStaticFields();
+
 private:
   CJNIBaseColumns();
 };
index 6ffecd3..03aa301 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "BitSet.h"
 #include "jutils/jutils-details.hpp"
 
@@ -29,17 +30,23 @@ CJNIBitSet::CJNIBitSet() : CJNIBase("java.util.BitSet")
 
 CJNIBitSet::CJNIBitSet(int bitCount) : CJNIBase("java.util.BitSet")
 {
-  m_object = new_object(GetClassName(), "<init>", "(I)V", (jint)bitCount);
+  m_object = new_object(GetClassName(),
+    "<init>", "(I)V",
+    (jint)bitCount);
 }
 
 void CJNIBitSet::flip(int index)
 {
-  call_method<void>(m_object, "flip", "(I)V", index);
+  call_method<void>(m_object,
+    "flip", "(I)V",
+    index);
 }
 
 void CJNIBitSet::flip(int fromIndex, int toIndex)
 {
-  call_method<void>(m_object, "flip", "(II)V", fromIndex, toIndex);
+  call_method<void>(m_object,
+    "flip", "(II)V",
+    fromIndex, toIndex);
 }
 
 void CJNIBitSet::set(int index)
@@ -49,106 +56,140 @@ void CJNIBitSet::set(int index)
 
 void CJNIBitSet::set(int fromIndex, bool state)
 {
-  call_method<void>(m_object, "fromIndex", "(IZ)V", fromIndex, state);
+  call_method<void>(m_object,
+    "fromIndex", "(IZ)V",
+    fromIndex, state);
 }
 
 void CJNIBitSet::set(int fromIndex, int toIndex)
 {
-  call_method<void>(m_object, "set", "(II)V", fromIndex, toIndex);
+  call_method<void>(m_object,
+    "set", "(II)V",
+    fromIndex, toIndex);
 }
 
 void CJNIBitSet::set(int fromIndex, int toIndex, bool state)
 {
-  call_method<void>(m_object, "set", "(IIZ)V", fromIndex, toIndex, state);
+  call_method<void>(m_object,
+    "set", "(IIZ)V",
+    fromIndex, toIndex, state);
 }
 
 void CJNIBitSet::clear(int index)
 {
-  call_method<void>(m_object, "clear", "(I)V", index);
+  call_method<void>(m_object,
+    "clear", "(I)V",
+    index);
 }
 
 void CJNIBitSet::clear(int fromIndex, int toIndex)
 {
-  call_method<void>(m_object, "clear", "(II)V", fromIndex, toIndex);
+  call_method<void>(m_object,
+    "clear", "(II)V",
+    fromIndex, toIndex);
 }
 
 void CJNIBitSet::clear()
 {
-  call_method<void>(m_object, "clear", "()V");
+  call_method<void>(m_object,
+    "clear", "()V");
 }
 
 bool CJNIBitSet::get(int index)
 {
-  return call_method<jboolean>(m_object, "get", "(I)V", index);
+  return call_method<jboolean>(m_object,
+    "get", "(I)V",
+    index);
 }
 
 CJNIBitSet CJNIBitSet::get(int fromIndex, int toIndex)
 {
-  return call_method<jhobject>(m_object, "get", "(II)V", fromIndex, toIndex);
+  return call_method<jhobject>(m_object,
+    "get", "(II)V",
+    fromIndex, toIndex);
 }
 
 int CJNIBitSet::nextSetBit(int index)
 {
-  return call_method<jint>(m_object, "nextSetBit", "(I)I", index);
+  return call_method<jint>(m_object,
+    "nextSetBit", "(I)I",
+    index);
 }
 
 int CJNIBitSet::nextClearBit(int index)
 {
-  return call_method<jint>(m_object, "nextClearBit", "(I)I", index);
+  return call_method<jint>(m_object,
+    "nextClearBit", "(I)I",
+    index);
 }
 
 int CJNIBitSet::length()
 {
-  return call_method<jint>(m_object, "length", "()I");
+  return call_method<jint>(m_object,
+    "length", "()I");
 }
 
 bool CJNIBitSet::isEmpty()
 {
-  return call_method<jboolean>(m_object, "isEmpty", "()Z");
+  return call_method<jboolean>(m_object,
+    "isEmpty", "()Z");
 }
 
 bool CJNIBitSet::intersects(const CJNIBitSet &bs)
 {
-  return call_method<jboolean>(m_object, "intersects", "(Ljava/util/BitSet;)Z", bs.get_raw());
+  return call_method<jboolean>(m_object,
+    "intersects", "(Ljava/util/BitSet;)Z",
+    bs.get_raw());
 }
 
 int CJNIBitSet::cardinality()
 {
-  return call_method<jint>(m_object, "cardinality", "()I");
+  return call_method<jint>(m_object,
+    "cardinality", "()I");
 }
 
 void CJNIBitSet::jand(const CJNIBitSet &bs)
 {
-  call_method<void>(m_object, "jand", "(Ljava/util/BitSet;)V", bs.get_raw());
+  call_method<void>(m_object,
+    "jand", "(Ljava/util/BitSet;)V",
+    bs.get_raw());
 }
 
 void CJNIBitSet::jor(const CJNIBitSet &bs)
 {
-  call_method<void>(m_object, "jor", "(Ljava/util/BitSet;)V", bs.get_raw());
+  call_method<void>(m_object,
+    "jor", "(Ljava/util/BitSet;)V",
+    bs.get_raw());
 }
 
 void CJNIBitSet::jxor(const CJNIBitSet &bs)
 {
-  call_method<void>(m_object, "jxor", "(Ljava/util/BitSet;)V", bs.get_raw());
+  call_method<void>(m_object,
+    "jxor", "(Ljava/util/BitSet;)V",
+    bs.get_raw());
 }
 
 void CJNIBitSet::jandNot(const CJNIBitSet &bs)
 {
-  call_method<void>(m_object, "jandNot", "(Ljava/util/BitSet;)V", bs.get_raw());
+  call_method<void>(m_object,
+    "jandNot", "(Ljava/util/BitSet;)V",
+    bs.get_raw());
 }
 
 int CJNIBitSet::hashCode()
 {
-  return call_method<jint>(m_object, "hashCode", "()I");
+  return call_method<jint>(m_object,
+    "hashCode", "()I");
 }
 
 int CJNIBitSet::size()
 {
-  return call_method<jint>(m_object, "size", "()I");
+  return call_method<jint>(m_object,
+    "size", "()I");
 }
 
 std::string CJNIBitSet::toString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
-
index d632cff..d5842d5 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIBitSet : public CJNIBase
 {
 public:
-  ~CJNIBitSet(){};
-  CJNIBitSet(const jni::jhobject &object) : CJNIBase(object){};
   CJNIBitSet();
   CJNIBitSet(int);
+  CJNIBitSet(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIBitSet() {};
 
   void flip(int);
   void flip(int, int);
@@ -39,17 +40,17 @@ public:
   void clear();
   bool get(int);
   CJNIBitSet get(int, int);
-  int nextSetBit(int);
-  int nextClearBit(int);
-  int length();
+  int  nextSetBit(int);
+  int  nextClearBit(int);
+  int  length();
   bool isEmpty();
   bool intersects(const CJNIBitSet &);
-  int cardinality();
+  int  cardinality();
   void jand(const CJNIBitSet &);
   void jor(const CJNIBitSet &);
   void jxor(const CJNIBitSet &);
   void jandNot(const CJNIBitSet &);
-  int hashCode();
-  int size();
+  int  hashCode();
+  int  size();
   std::string toString();
 };
index cd02c03..eb1c4ac 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIBitmap : public CJNIBase
 {
 public:
   CJNIBitmap();
-  ~CJNIBitmap(){};
-  CJNIBitmap(const jni::jhobject &object) : CJNIBase(object){};
-
+  CJNIBitmap(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIBitmap() {};
 };
index f36385d..aa4efd9 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "BitmapDrawable.h"
 #include "Bitmap.h"
 #include "jutils/jutils-details.hpp"
@@ -31,5 +32,6 @@ CJNIBitmapDrawable::CJNIBitmapDrawable() : CJNIDrawable("android/graphics/drawab
 
 CJNIBitmap CJNIBitmapDrawable::getBitmap()
 {
-   return (CJNIBitmap)call_method<jhobject>(m_object, "getBitmap", "()Landroid/graphics/Bitmap;");
+   return call_method<jhobject>(m_object,
+    "getBitmap", "()Landroid/graphics/Bitmap;");
 }
index fe505f9..db287ab 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "Drawable.h"
+
 class CJNIBitmap;
+
 class CJNIBitmapDrawable : public CJNIDrawable
 {
 public:
   CJNIBitmapDrawable();
-  CJNIBitmapDrawable(const jni::jhobject &object) : CJNIDrawable(object){};
-  CJNIBitmapDrawable(const CJNIDrawable &drawable) : CJNIDrawable(drawable.get_raw()){};
+  CJNIBitmapDrawable(const jni::jhobject &object)  : CJNIDrawable(object) {};
+  CJNIBitmapDrawable(const CJNIDrawable &drawable) : CJNIDrawable(drawable.get_raw()) {};
+  ~CJNIBitmapDrawable() {};
+
   CJNIBitmap getBitmap();
-  ~CJNIBitmapDrawable(){};
 };
index 0ba76bb..78208c3 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 class CJNIIntent;
+
 class CJNIBroadcastReceiver : public CJNIBase
 {
 public:
   static void _onReceive(JNIEnv *env, jobject context, jobject intent);
 
 protected:
-  virtual void onReceive(CJNIIntent intent)=0;
-  ~CJNIBroadcastReceiver(){};
   CJNIBroadcastReceiver(const std::string &className);
+  ~CJNIBroadcastReceiver(){};
+
+  virtual void onReceive(CJNIIntent intent)=0;
 
 private:
-  static CJNIBroadcastReceiverm_receiverInstance;
+  static CJNIBroadcastReceiver *m_receiverInstance;
 };
index a3d2932..23b2316 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "CharSequence.h"
 #include "jutils/jutils-details.hpp"
+
 using namespace jni;
 
 std::string CJNICharSequence::toString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
index 80adb06..85b88f5 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNICharSequence : public CJNIBase
 {
 public:
-  ~CJNICharSequence(){};
-  CJNICharSequence(const jni::jhobject &object) : CJNIBase(object){};
+  CJNICharSequence(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNICharSequence() {};
+
   std::string toString();
+
 private:
   CJNICharSequence();
 };
index d1d685c..72f7eb4 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "ClassLoader.h"
 #include "jutils/jutils-details.hpp"
+
 using namespace jni;
 
 jhclass CJNIClassLoader::loadClass(std::string className)
 {
-  return (jhclass)call_method<jhclass>(m_object, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;", jcast<jhstring>(className)); 
+  return call_method<jhclass>(m_object,
+    "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;",
+    jcast<jhstring>(className)); 
 }
index 821c241..1976e77 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIClassLoader : public CJNIBase
 {
 public:
-  ~CJNIClassLoader(){};
+  CJNIClassLoader(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIClassLoader() {};
+
   jni::jhclass loadClass(std::string className);
-  CJNIClassLoader(const jni::jhobject &object) : CJNIBase(object){};
+
 private:
   CJNIClassLoader();
 };
index e27ae66..a33cbf0 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "ConnectivityManager.h"
 #include "NetworkInfo.h"
 #include "jutils/jutils-details.hpp"
 
+using namespace jni;
+
 int CJNIConnectivityManager::TYPE_MOBILE(0);
 int CJNIConnectivityManager::TYPE_WIFI(0);
 int CJNIConnectivityManager::TYPE_MOBILE_MMS(0);
@@ -32,81 +35,96 @@ int CJNIConnectivityManager::TYPE_BLUETOOTH(0);
 int CJNIConnectivityManager::TYPE_DUMMY(0);
 int CJNIConnectivityManager::TYPE_ETHERNET(0);
 int CJNIConnectivityManager::DEFAULT_NETWORK_PREFERENCE(0);
-using namespace jni;
 
 void CJNIConnectivityManager::PopulateStaticFields()
 {
   jhclass clazz = find_class("android.net.ConnectivityManager");
-  TYPE_MOBILE = (get_static_field<int>(clazz, "TYPE_MOBILE"));
-  TYPE_WIFI = (get_static_field<int>(clazz, "TYPE_WIFI"));
-  TYPE_MOBILE_MMS = (get_static_field<int>(clazz, "TYPE_MOBILE_MMS"));
-  TYPE_MOBILE_SUPL = (get_static_field<int>(clazz, "TYPE_MOBILE_SUPL"));
-  TYPE_MOBILE_DUN = (get_static_field<int>(clazz, "TYPE_MOBILE_DUN"));
+  TYPE_MOBILE       = (get_static_field<int>(clazz, "TYPE_MOBILE"));
+  TYPE_WIFI         = (get_static_field<int>(clazz, "TYPE_WIFI"));
+  TYPE_MOBILE_MMS   = (get_static_field<int>(clazz, "TYPE_MOBILE_MMS"));
+  TYPE_MOBILE_SUPL  = (get_static_field<int>(clazz, "TYPE_MOBILE_SUPL"));
+  TYPE_MOBILE_DUN   = (get_static_field<int>(clazz, "TYPE_MOBILE_DUN"));
   TYPE_MOBILE_HIPRI = (get_static_field<int>(clazz, "TYPE_MOBILE_HIPRI"));
-  TYPE_WIMAX = (get_static_field<int>(clazz, "TYPE_WIMAX"));
-  TYPE_BLUETOOTH = (get_static_field<int>(clazz, "TYPE_BLUETOOTH"));
-  TYPE_DUMMY = (get_static_field<int>(clazz, "TYPE_DUMMY"));
-  TYPE_ETHERNET = (get_static_field<int>(clazz, "TYPE_ETHERNET"));
+  TYPE_WIMAX        = (get_static_field<int>(clazz, "TYPE_WIMAX"));
+  TYPE_BLUETOOTH    = (get_static_field<int>(clazz, "TYPE_BLUETOOTH"));
+  TYPE_DUMMY        = (get_static_field<int>(clazz, "TYPE_DUMMY"));
+  TYPE_ETHERNET     = (get_static_field<int>(clazz, "TYPE_ETHERNET"));
   DEFAULT_NETWORK_PREFERENCE = (get_static_field<int>(clazz, "DEFAULT_NETWORK_PREFERENCE"));
 }
 
 bool CJNIConnectivityManager::isNetworkTypeValid(int networkType)
 {
-  return call_method<jboolean>(m_object, "isNetworkTypeValid", "(I)Z", networkType);
+  return call_method<jboolean>(m_object,
+    "isNetworkTypeValid", "(I)Z",
+    networkType);
 }
 
 void CJNIConnectivityManager::setNetworkPreference(int preference)
 {
-  return call_method<void>(m_object, "setNetworkPreference", "(I)V", preference);
+  return call_method<void>(m_object,
+    "setNetworkPreference", "(I)V",
+    preference);
 }
 
 int CJNIConnectivityManager::getNetworkPreference()
 {
-  return call_method<jint>(m_object, "getNetworkPreference", "()I");
+  return call_method<jint>(m_object,
+    "getNetworkPreference", "()I");
 }
 
 CJNINetworkInfo CJNIConnectivityManager::getActiveNetworkInfo()
 {
-  return (CJNINetworkInfo)call_method<jhobject>(m_object, "getActiveNetworkInfo", "()Landroid/net/NetworkInfo;");
+  return call_method<jhobject>(m_object,
+    "getActiveNetworkInfo", "()Landroid/net/NetworkInfo;");
 }
 
 CJNINetworkInfo CJNIConnectivityManager::getNetworkInfo(int networkType)
 {
-  return (CJNINetworkInfo)call_method<jhobject>(m_object, "getNetworkInfo", "(I)Landroid/net/NetworkInfo;", networkType);
+  return call_method<jhobject>(m_object,
+    "getNetworkInfo", "(I)Landroid/net/NetworkInfo;",
+    networkType);
 }
 
 std::vector<CJNINetworkInfo> CJNIConnectivityManager::getAllNetworkInfo()
 {
   JNIEnv *env = xbmc_jnienv();
-  jhobjectArray oNetworks = call_method<jhobjectArray>(m_object, "getAllNetworkInfo", "()[Landroid/net/NetworkInfo;");
+
+  jhobjectArray oNetworks = call_method<jhobjectArray>(m_object,
+    "getAllNetworkInfo", "()[Landroid/net/NetworkInfo;");
   jsize size = env->GetArrayLength(oNetworks.get());
   std::vector<CJNINetworkInfo> networks;
   networks.reserve(size);
   for(int i = 0; i < size; i++)
-  {
     networks.push_back(CJNINetworkInfo(jhobject(env->GetObjectArrayElement(oNetworks.get(), i))));
-  }
+
   return networks;
 }
 
 int CJNIConnectivityManager::startUsingNetworkFeature(int networkType, std::string feature)
 {
-  return call_method<jint>(m_object, "startUsingNetworkFeature", "(ILjava/lang/String;)I", networkType, jcast<jhstring>(feature));
+  return call_method<jint>(m_object,
+    "startUsingNetworkFeature", "(ILjava/lang/String;)I",
+    networkType, jcast<jhstring>(feature));
 }
 
 int CJNIConnectivityManager::stopUsingNetworkFeature(int networkType, std::string feature)
 {
-  return call_method<jint>(m_object, "stopUsingNetworkFeature", "(ILjava/lang/String;)I", networkType, jcast<jhstring>(feature));
+  return call_method<jint>(m_object,
+    "stopUsingNetworkFeature", "(ILjava/lang/String;)I",
+    networkType, jcast<jhstring>(feature));
 }
 
 bool CJNIConnectivityManager::requestRouteToHost(int networkType, int hostAddress)
 {
-  return call_method<jboolean>(m_object, "requestRouteToHost", "(II)Z", networkType, hostAddress);
+  return call_method<jboolean>(m_object,
+    "requestRouteToHost", "(II)Z",
+    networkType, hostAddress);
 }
 
 bool CJNIConnectivityManager::getBackgroundDataSetting()
 {
-  return call_method<jboolean>(m_object, "getBackgroundDataSetting", "()Z");
+  return call_method<jboolean>(m_object,
+    "getBackgroundDataSetting", "()Z");
 }
 
 
index 60a53f8..45fcf7c 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNINetworkInfo;
+
 class CJNIConnectivityManager : public CJNIBase
 {
 public:
-  CJNIConnectivityManager(const jni::jhobject &object) : CJNIBase(object){};
+  CJNIConnectivityManager(const jni::jhobject &object) : CJNIBase(object) {};
+
   bool isNetworkTypeValid(int);
   void setNetworkPreference(int);
-  int getNetworkPreference();
+  int  getNetworkPreference();
   CJNINetworkInfo getActiveNetworkInfo();
   CJNINetworkInfo getNetworkInfo(int);
   std::vector<CJNINetworkInfo> getAllNetworkInfo();
-  int startUsingNetworkFeature(int, std::string);
-  int stopUsingNetworkFeature(int, std::string);
+  int  startUsingNetworkFeature(int, std::string);
+  int  stopUsingNetworkFeature(int, std::string);
   bool requestRouteToHost(int, int);
   bool getBackgroundDataSetting();
 
+  static void PopulateStaticFields();
   static int TYPE_MOBILE;
   static int TYPE_WIFI;
   static int TYPE_MOBILE_MMS;
@@ -48,7 +52,7 @@ public:
   static int TYPE_ETHERNET;
   static int DEFAULT_NETWORK_PREFERENCE;
 
-  static void PopulateStaticFields();
+
 private:
   CJNIConnectivityManager();
 };
index 909fb14..2578ace 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "ContentResolver.h"
 #include "Cursor.h"
 #include "jutils/jutils-details.hpp"
 #include "URI.h"
+
+using namespace jni;
+
 std::string CJNIContentResolver::SCHEME_CONTENT;
 std::string CJNIContentResolver::SCHEME_ANDROID_RESOURCE;
 std::string CJNIContentResolver::SCHEME_FILE;
 std::string CJNIContentResolver::CURSOR_ITEM_BASE_TYPE;
 std::string CJNIContentResolver::CURSOR_DIR_BASE_TYPE;
 
-using namespace jni;
 void CJNIContentResolver::PopulateStaticFields()
 {
   jhclass clazz = find_class("android/content/ContentResolver");
-  SCHEME_CONTENT = jcast<std::string>(get_static_field<jhstring>(clazz,"SCHEME_CONTENT"));
+  SCHEME_CONTENT          = jcast<std::string>(get_static_field<jhstring>(clazz,"SCHEME_CONTENT"));
   SCHEME_ANDROID_RESOURCE = jcast<std::string>(get_static_field<jhstring>(clazz,"SCHEME_ANDROID_RESOURCE"));
-  SCHEME_FILE = jcast<std::string>(get_static_field<jhstring>(clazz,"SCHEME_FILE"));
-  CURSOR_ITEM_BASE_TYPE = jcast<std::string>(get_static_field<jhstring>(clazz,"CURSOR_ITEM_BASE_TYPE"));
-  CURSOR_DIR_BASE_TYPE = jcast<std::string>(get_static_field<jhstring>(clazz,"CURSOR_DIR_BASE_TYPE"));
+  SCHEME_FILE             = jcast<std::string>(get_static_field<jhstring>(clazz,"SCHEME_FILE"));
+  CURSOR_ITEM_BASE_TYPE   = jcast<std::string>(get_static_field<jhstring>(clazz,"CURSOR_ITEM_BASE_TYPE"));
+  CURSOR_DIR_BASE_TYPE    = jcast<std::string>(get_static_field<jhstring>(clazz,"CURSOR_DIR_BASE_TYPE"));
 }
 
 CJNICursor CJNIContentResolver::query(const CJNIURI &uri, const std::vector<std::string> &projection, const std::string &selection, const std::vector<std::string> &selectionArgs, const std::string &sortOrder)
 {
-
-  return (CJNICursor)(call_method<jhobject>(m_object, \
-         "query","(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;", \
-         uri.get_raw(), jcast<jhobjectArray>(projection), jcast<jhstring>(selection), jcast<jhobjectArray>(selectionArgs), jcast<jhstring>(sortOrder)));
+  return (CJNICursor)(call_method<jhobject>(m_object,
+    "query","(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;",
+    uri.get_raw(), jcast<jhobjectArray>(projection), jcast<jhstring>(selection), jcast<jhobjectArray>(selectionArgs), jcast<jhstring>(sortOrder)));
 }
index 1add109..d1b0110 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNICursor;
 class CJNIURI;
+
 class CJNIContentResolver : public CJNIBase
 {
 public:
-  CJNIContentResolver(const jni::jhobject &object) : CJNIBase(object){};
+  CJNIContentResolver(const jni::jhobject &object) : CJNIBase(object) {};
+
+  CJNICursor query(const CJNIURI &uri, const std::vector<std::string> &projection, const std::string &selection, const std::vector<std::string> &selectionArgs, const std::string &sortOrder);
 
+  static void PopulateStaticFields();
   static std::string SCHEME_CONTENT;
   static std::string SCHEME_ANDROID_RESOURCE;
   static std::string SCHEME_FILE;
   static std::string CURSOR_ITEM_BASE_TYPE;
   static std::string CURSOR_DIR_BASE_TYPE;
 
-  CJNICursor query(const CJNIURI &uri, const std::vector<std::string> &projection, const std::string &selection, const std::vector<std::string> &selectionArgs, const std::string &sortOrder);
-
-  static void PopulateStaticFields();
 private:
   CJNIContentResolver();
 };
index 529dc7d..bf2effd 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "Context.h"
 #include "PackageManager.h"
 #include <android/log.h>
 #include "Cursor.h"
 #include "ConnectivityManager.h"
 #include "AudioManager.h"
+
 #include <android/native_activity.h>
 
 using namespace jni;
 
 jhobject CJNIContext::m_context(0);
 CJNIContext* CJNIContext::m_appInstance(NULL);
+
 CJNIContext::CJNIContext(const ANativeActivity *nativeActivity)
 {
   m_context.reset(nativeActivity->clazz);
@@ -67,89 +70,111 @@ void CJNIContext::PopulateStaticFields()
   CJNIContentResolver::PopulateStaticFields();
   CJNIConnectivityManager::PopulateStaticFields();
   CJNIAudioManager::PopulateStaticFields();
-
 }
 
 CJNIPackageManager CJNIContext::GetPackageManager()
 {
-  return (CJNIPackageManager)call_method<jhobject>(m_context, "getPackageManager", "()Landroid/content/pm/PackageManager;");
+  return call_method<jhobject>(m_context,
+    "getPackageManager", "()Landroid/content/pm/PackageManager;");
 }
 
 void CJNIContext::startActivity(const CJNIIntent &intent)
 {
-  call_method<void>(jhobject(m_context), "startActivity", "(Landroid/content/Intent;)V", intent.get_raw());
+  call_method<void>(jhobject(m_context),
+    "startActivity", "(Landroid/content/Intent;)V",
+    intent.get_raw());
 }
 
 int CJNIContext::checkCallingOrSelfPermission(const std::string &permission)
 {
-  return call_method<int>(m_context, "checkCallingOrSelfPermission", "(Ljava/lang/String;)I", jcast<jhstring>(permission));
+  return call_method<int>(m_context,
+    "checkCallingOrSelfPermission", "(Ljava/lang/String;)I",
+    jcast<jhstring>(permission));
 }
 
 jhobject CJNIContext::getSystemService(const std::string &service)
 {
-  return call_method<jhobject>(m_context, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;", jcast<jhstring>(service));
+  return call_method<jhobject>(m_context,
+    "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",
+    jcast<jhstring>(service));
 }
 
 CJNIIntent CJNIContext::registerReceiver(const CJNIBroadcastReceiver &receiver, const CJNIIntentFilter &filter)
 {
-  return (CJNIIntent)call_method<jhobject>(m_context, "registerReceiver", \
-                             "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;", receiver.get_raw(), filter.get_raw());
+  return call_method<jhobject>(m_context,
+    "registerReceiver", "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;",
+    receiver.get_raw(), filter.get_raw());
 }
 
 CJNIIntent CJNIContext::registerReceiver(const CJNIIntentFilter &filter)
 {
-  return (CJNIIntent)call_method<jhobject>(m_context, "registerReceiver", \
-                             "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;", (jobject)NULL, filter.get_raw());
+  return call_method<jhobject>(m_context,
+    "registerReceiver", "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;",
+    (jobject)NULL, filter.get_raw());
 }
 
 void CJNIContext::unregisterReceiver(const CJNIBroadcastReceiver &receiver)
 {
-  call_method<void>(m_context, "unregisterReceiver", "(Landroid/content/BroadcastReceiver;)V", receiver.get_raw());
+  call_method<void>(m_context,
+    "unregisterReceiver", "(Landroid/content/BroadcastReceiver;)V",
+    receiver.get_raw());
 }
 
 CJNIIntent CJNIContext::sendBroadcast(const CJNIIntent &intent)
 {
-  return (CJNIIntent)call_method<jhobject>(m_context, "sendBroadcast", "(Landroid/content/Intent;)V", intent.get_raw());
+  return call_method<jhobject>(m_context,
+    "sendBroadcast", "(Landroid/content/Intent;)V",
+    intent.get_raw());
 }
 
 CJNIIntent CJNIContext::getIntent()
 {
-  return (CJNIIntent)call_method<jhobject>(m_context, "getIntent", "()Landroid/content/Intent;");
+  return call_method<jhobject>(m_context,
+    "getIntent", "()Landroid/content/Intent;");
 }
 
 CJNIClassLoader CJNIContext::getClassLoader()
 {
-  return (CJNIClassLoader)call_method<jhobject>(m_context, "getClassLoader", "()Ljava/lang/ClassLoader;");
+  return call_method<jhobject>(m_context,
+    "getClassLoader", "()Ljava/lang/ClassLoader;");
 }
 
 CJNIApplicationInfo CJNIContext::getApplicationInfo()
 {
-  return (CJNIApplicationInfo)call_method<jhobject>(m_context, "getApplicationInfo", "()Landroid/content/pm/ApplicationInfo;");
+  return call_method<jhobject>(m_context,
+    "getApplicationInfo", "()Landroid/content/pm/ApplicationInfo;");
 }
 
 std::string CJNIContext::getPackageResourcePath()
 {
-  return jcast<std::string>(call_method<jhstring>(m_context, "getPackageResourcePath", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_context,
+    "getPackageResourcePath", "()Ljava/lang/String;"));
 }
 
 CJNIFile CJNIContext::getCacheDir()
 {
-  return (CJNIFile)call_method<jhobject>(m_context, "getCacheDir", "()Ljava/io/File;");
+  return call_method<jhobject>(m_context,
+    "getCacheDir", "()Ljava/io/File;");
 }
 
 CJNIFile CJNIContext::getDir(const std::string &path, int mode)
 {
-  return (CJNIFile)call_method<jhobject>(m_context, "getDir", "(Ljava/lang/String;I)Ljava/io/File;", jcast<jhstring>(path), mode);
+  return call_method<jhobject>(m_context,
+    "getDir", "(Ljava/lang/String;I)Ljava/io/File;",
+    jcast<jhstring>(path), mode);
 }
 
 CJNIFile CJNIContext::getExternalFilesDir(const std::string &path)
 {
-  return (CJNIFile)call_method<jhobject>(m_context, "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;", jcast<jhstring>(path));
+  return call_method<jhobject>(m_context,
+    "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;",
+    jcast<jhstring>(path));
 }
 
 CJNIContentResolver CJNIContext::getContentResolver()
 {
-  return (CJNIContentResolver)call_method<jhobject>(m_context, "getContentResolver", "()Landroid/content/ContentResolver;");
+  return call_method<jhobject>(m_context,
+    "getContentResolver", "()Landroid/content/ContentResolver;");
 }
 
 void CJNIContext::_onNewIntent(JNIEnv *env, jobject context, jobject intent)
index 8b17e86..73d47c0 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "BroadcastReceiver.h"
+
 class ANativeActivity;
 class CJNIIntent;
 class CJNIPackageManager;
@@ -29,6 +31,7 @@ class CJNIClassLoader;
 class CJNIApplicationInfo;
 class CJNIFile;
 class CJNIContentResolver;
+
 class CJNIContext
 {
 public:
@@ -50,13 +53,16 @@ public:
   static CJNIContentResolver getContentResolver();
   static CJNIContext* GetAppInstance() { return m_appInstance; };
   static void _onNewIntent(JNIEnv *env, jobject context, jobject intent);
+
 protected:
-  virtual void onNewIntent(CJNIIntent intent)=0;
   CJNIContext(const ANativeActivity *nativeActivity);
   ~CJNIContext();
 
+  virtual void onNewIntent(CJNIIntent intent)=0;
+
 private:
   CJNIContext();
+
   void PopulateStaticFields();
   void operator=(CJNIContext const&){};
   static jni::jhobject m_context;
index e79cb8e..a369771 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "Cursor.h"
 #include "jutils/jutils-details.hpp"
 #include "URI.h"
@@ -32,150 +33,189 @@ int CJNICursor::FIELD_TYPE_BLOB(0);
 void CJNICursor::PopulateStaticFields()
 {
   jhclass clazz = find_class("android/database/Cursor");
-  FIELD_TYPE_NULL = (get_static_field<int>(clazz, "FIELD_TYPE_NULL"));
-  FIELD_TYPE_INTEGER = (get_static_field<int>(clazz, "FIELD_TYPE_INTEGER"));
-  FIELD_TYPE_FLOAT = (get_static_field<int>(clazz, "FIELD_TYPE_FLOAT"));
-  FIELD_TYPE_STRING = (get_static_field<int>(clazz, "FIELD_TYPE_STRING"));
-  FIELD_TYPE_BLOB = (get_static_field<int>(clazz, "FIELD_TYPE_BLOB"));
+  FIELD_TYPE_NULL     = (get_static_field<int>(clazz, "FIELD_TYPE_NULL"));
+  FIELD_TYPE_INTEGER  = (get_static_field<int>(clazz, "FIELD_TYPE_INTEGER"));
+  FIELD_TYPE_FLOAT    = (get_static_field<int>(clazz, "FIELD_TYPE_FLOAT"));
+  FIELD_TYPE_STRING   = (get_static_field<int>(clazz, "FIELD_TYPE_STRING"));
+  FIELD_TYPE_BLOB     = (get_static_field<int>(clazz, "FIELD_TYPE_BLOB"));
 }
 
 int CJNICursor::getCount()
 {
-  return call_method<jint>(m_object, "getCount", "()I");
+  return call_method<jint>(m_object,
+    "getCount", "()I");
 }
 
 int CJNICursor::getPosition()
 {
-  return call_method<jint>(m_object, "getPosition", "()I");
+  return call_method<jint>(m_object,
+    "getPosition", "()I");
 }
 
 bool CJNICursor::move(int offset)
 {
-  return call_method<jboolean>(m_object, "move", "(I)Z", offset);
+  return call_method<jboolean>(m_object,
+    "move", "(I)Z",
+    offset);
 }
 
 bool CJNICursor::moveToPosition(int position)
 {
-  return call_method<jboolean>(m_object, "moveToPosition", "(I)Z", position);
+  return call_method<jboolean>(m_object,
+    "moveToPosition", "(I)Z", position);
 }
 
 bool CJNICursor::moveToFirst()
 {
-  return call_method<jboolean>(m_object, "moveToFirst", "()Z");
+  return call_method<jboolean>(m_object,
+    "moveToFirst", "()Z");
 }
 
 bool CJNICursor::moveToLast()
 {
-  return call_method<jboolean>(m_object, "moveToLast", "()Z");
+  return call_method<jboolean>(m_object,
+    "moveToLast", "()Z");
 }
 
 bool CJNICursor::moveToNext()
 {
-  return call_method<jboolean>(m_object, "moveToNext", "()Z");
+  return call_method<jboolean>(m_object,
+    "moveToNext", "()Z");
 }
 
 bool CJNICursor::moveToPrevious()
 {
-  return call_method<jboolean>(m_object, "moveToPrevious", "()Z");
+  return call_method<jboolean>(m_object,
+    "moveToPrevious", "()Z");
 }
 
 bool CJNICursor::isFirst()
 {
-  return call_method<jboolean>(m_object, "isFirst", "()Z");
+  return call_method<jboolean>(m_object,
+    "isFirst", "()Z");
 }
 
 bool CJNICursor::isLast()
 {
-  return call_method<jboolean>(m_object, "isLast", "()Z");
+  return call_method<jboolean>(m_object,
+    "isLast", "()Z");
 }
 
 bool CJNICursor::isBeforeFirst()
 {
-  return call_method<jboolean>(m_object, "isBeforeFirst", "()Z");
+  return call_method<jboolean>(m_object,
+    "isBeforeFirst", "()Z");
 }
 
 bool CJNICursor::isAfterLast()
 {
-  return call_method<jboolean>(m_object, "isAfterLast", "()Z");
+  return call_method<jboolean>(m_object,
+    "isAfterLast", "()Z");
 }
 
 int CJNICursor::getColumnIndex(const std::string &columnName)
 {
-  return call_method<jint>(m_object, "getColumnIndex", "(Ljava/lang/String;)I", jcast<jhstring>(columnName));
+  return call_method<jint>(m_object,
+    "getColumnIndex", "(Ljava/lang/String;)I",
+    jcast<jhstring>(columnName));
 }
 
 std::string CJNICursor::getColumnName(int columnIndex)
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getColumnName", "(I)Ljava/lang/String;", columnIndex));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getColumnName", "(I)Ljava/lang/String;",
+    columnIndex));
 }
 
 std::vector<std::string> CJNICursor::getColumnNames()
 {
-  return jcast<std::vector<std::string>>(call_method<jhobjectArray>(m_object, "getColumnNames", "()[Ljava/lang/String;"));
+  return jcast<std::vector<std::string>>(call_method<jhobjectArray>(m_object,
+    "getColumnNames", "()[Ljava/lang/String;"));
 }
 
 int CJNICursor::getColumnCount()
 {
-  return call_method<jint>(m_object, "getColumnCount", "()I");
+  return call_method<jint>(m_object,
+    "getColumnCount", "()I");
 }
 
 std::string CJNICursor::getString(int columnIndex)
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getString", "(I)Ljava/lang/String;", columnIndex));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getString", "(I)Ljava/lang/String;",
+    columnIndex));
 }
 
 short CJNICursor::getShort(int columnIndex)
 {
-  return call_method<jshort>(m_object, "getShort", "()S", columnIndex);
+  return call_method<jshort>(m_object,
+    "getShort", "()S",
+    columnIndex);
 }
 
 int CJNICursor::getInt(int columnIndex)
 {
-  return call_method<jint>(m_object, "getInt", "()I", columnIndex);
+  return call_method<jint>(m_object,
+    "getInt", "()I",
+    columnIndex);
 }
 
 long CJNICursor::getLong(int columnIndex)
 {
-  return call_method<jint>(m_object, "getLong", "()J", columnIndex);
+  return call_method<jint>(m_object,
+    "getLong", "()J",
+    columnIndex);
 }
 
 float CJNICursor::getFloat(int columnIndex)
 {
-  return call_method<jfloat>(m_object, "getFloat", "()F", columnIndex);
+  return call_method<jfloat>(m_object,
+    "getFloat", "()F",
+    columnIndex);
 }
 
 double CJNICursor::getDouble(int columnIndex)
 {
-  return call_method<jdouble>(m_object, "getDouble", "()D", columnIndex);
+  return call_method<jdouble>(m_object,
+    "getDouble", "()D",
+    columnIndex);
 }
 
 int CJNICursor::getType(int columnIndex)
 {
-  return call_method<jint>(m_object, "getType", "(I)I", columnIndex);
+  return call_method<jint>(m_object,
+    "getType", "(I)I",
+    columnIndex);
 }
 
 bool CJNICursor::isNull(int columnIndex)
 {
-  return call_method<jboolean>(m_object, "isNull", "(I)Z", columnIndex);
+  return call_method<jboolean>(m_object,
+    "isNull", "(I)Z",
+    columnIndex);
 }
 
 void CJNICursor::deactivate()
 {
-  call_method<void>(m_object, "deactivate", "()V");
+  call_method<void>(m_object,
+    "deactivate", "()V");
 }
 
 bool CJNICursor::requery()
 {
-  return call_method<jboolean>(m_object, "requery", "()Z");
+  return call_method<jboolean>(m_object,
+    "requery", "()Z");
 }
 
 void CJNICursor::close()
 {
-  call_method<void>(m_object, "close", "()V");
+  call_method<void>(m_object,
+    "close", "()V");
 }
 
 bool CJNICursor::isClosed()
 {
-  return call_method<jboolean>(m_object, "isClosed", "()Z");
+  return call_method<jboolean>(m_object,
+    "isClosed", "()Z");
 }
 
index aad672e..93e042b 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "MediaStore.h"
+
 class CJNIURI;
+
 class CJNICursor : public CJNIBase
 {
 public:
-  ~CJNICursor(){};
   CJNICursor(const jni::jhobject &object) : CJNIBase(object){};
-  int getCount();
-  int getPosition();
+  ~CJNICursor(){};
+
+  int  getCount();
+  int  getPosition();
   bool move(int offset);
   bool moveToPosition(int position);
   bool moveToFirst();
@@ -38,30 +42,31 @@ public:
   bool isLast();
   bool isBeforeFirst();
   bool isAfterLast();
-  int getColumnIndex(const std::string &columnName);
+  int  getColumnIndex(const std::string &columnName);
   std::string getColumnName(int columnIndex);
   std::vector<std::string> getColumnNames();
-  int getColumnCount();
+  int  getColumnCount();
   std::string getString(int columnIndex);
   short getShort(int columnIndex);
-  int getInt(int columnIndex);
+  int  getInt(int columnIndex);
   long getLong(int columnIndex);
   float getFloat(int columnIndex);
   double getDouble(int columnIndex);
-  int getType(int columnIndex);
+  int  getType(int columnIndex);
   bool isNull(int columnIndex);
   void deactivate();
   bool requery();
   void close();
   bool isClosed();
 
+  static void PopulateStaticFields();
   static int FIELD_TYPE_NULL;
   static int FIELD_TYPE_INTEGER;
   static int FIELD_TYPE_FLOAT;
   static int FIELD_TYPE_STRING;
   static int FIELD_TYPE_BLOB;
 
-  static void PopulateStaticFields();
+
 private:
   CJNICursor();
 };
index 6aea820..db4c205 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "DhcpInfo.h"
 #include "jutils/jutils-details.hpp"
 
 using namespace jni;
 
 CJNIDhcpInfo::CJNIDhcpInfo(const jhobject &object) : CJNIBase(object)
-  ,ipAddress(get_field<int>(m_object, "ipAddress")) 
-  ,gateway(get_field<int>(m_object, "gateway"))
-  ,netmask(get_field<int>(m_object, "netmask"))
-  ,dns1(get_field<int>(m_object, "dns1"))
-  ,dns2(get_field<int>(m_object, "dns2"))
-  ,serverAddress(get_field<int>(m_object, "serverAddress"))
-  ,leaseDuration(get_field<int>(m_object, "leaseDuration"))
+  ,ipAddress(     get_field<int>(m_object, "ipAddress")) 
+  ,gateway(       get_field<int>(m_object, "gateway"))
+  ,netmask(       get_field<int>(m_object, "netmask"))
+  ,dns1(          get_field<int>(m_object, "dns1"))
+  ,dns2(          get_field<int>(m_object, "dns2"))
+  ,serverAddress( get_field<int>(m_object, "serverAddress"))
+  ,leaseDuration( get_field<int>(m_object, "leaseDuration"))
 {
 }
 
 std::string CJNIDhcpInfo::toString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 
 int CJNIDhcpInfo::describeContents()
 {
-  return call_method<jint>(m_object, "describeContents", "()I");
+  return call_method<jint>(m_object,
+    "describeContents", "()I");
 }
index 8774ca2..cbaa6c0 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIDhcpInfo : public CJNIBase
 {
 public:
+  CJNIDhcpInfo();
+  CJNIDhcpInfo(const jni::jhobject &object);
+  ~CJNIDhcpInfo(){};
+
   std::string toString();
   int ipAddress;
   int gateway;
@@ -32,9 +37,4 @@ public:
   int serverAddress;
   int leaseDuration;
   int describeContents();
-
-  CJNIDhcpInfo();
-  ~CJNIDhcpInfo(){};
-  CJNIDhcpInfo(const jni::jhobject &object);
-private:
 };
index 17cfa73..cc2dfbf 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIDrawable : public CJNIBase
 {
 public:
   CJNIDrawable();
-  ~CJNIDrawable(){};
   CJNIDrawable(const jni::jhobject &object) : CJNIBase(object){};
   CJNIDrawable(std::string classname) : CJNIBase(classname){};
+  ~CJNIDrawable(){};
 };
index 3472ffd..32a039b 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "Enum.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,14 +25,17 @@ using namespace jni;
 
 std::string CJNIEnum::name()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "name", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "name", "()Ljava/lang/String;"));
 }
 
 std::string CJNIEnum::toString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 bool CJNIEnum::equals(const CJNIEnum &object)
 {
-  return call_method<jboolean>(m_object, "equals", "(Ljava/lang/Object;)Z", object.get_raw());
+  return call_method<jboolean>(m_object,
+    "equals", "(Ljava/lang/Object;)Z", object.get_raw());
 }
index 13adc47..726b415 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
+
 class CJNIEnum : public CJNIBase
 {
 public:
-  CJNIEnum(jni::jhobject const& object) : CJNIBase(object){};
+  CJNIEnum(jni::jhobject const& object) : CJNIBase(object) {};
+  ~CJNIEnum() {};
+
   virtual std::string name();
   virtual std::string toString();
   virtual bool equals(const CJNIEnum &object);
-  ~CJNIEnum(){};
 };
index 502cb5e..b9805b9 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "Environment.h"
 #include "File.h"
 #include "jutils/jutils-details.hpp"
@@ -25,15 +26,19 @@ using namespace jni;
 
 std::string CJNIEnvironment::getExternalStorageState()
 {
-  return jcast<std::string>(call_static_method<jhstring>("android/os/Environment", "getExternalStorageState", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_static_method<jhstring>("android/os/Environment",
+    "getExternalStorageState", "()Ljava/lang/String;"));
 }
 
 CJNIFile CJNIEnvironment::getExternalStorageDirectory()
 {
-  return (CJNIFile)call_static_method<jhobject>("android/os/Environment", "getExternalStorageDirectory", "()Ljava/io/File;");
+  return (CJNIFile)call_static_method<jhobject>("android/os/Environment",
+    "getExternalStorageDirectory", "()Ljava/io/File;");
 }
 
 CJNIFile CJNIEnvironment::getExternalStoragePublicDirectory(const std::string &type)
 {
-  return (CJNIFile)call_static_method<jhobject>("android/os/Environment", "getExternalStoragePublicDirectory", "(Ljava/lang/String;)Ljava/io/File;", jcast<jhstring>(type));
+  return (CJNIFile)call_static_method<jhobject>("android/os/Environment",
+    "getExternalStoragePublicDirectory", "(Ljava/lang/String;)Ljava/io/File;",
+    jcast<jhstring>(type));
 }
index 1246765..5cc4839 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIFile;
+
 class CJNIEnvironment : public CJNIBase
 {
 public:
-  static std::string getExternalStorageState();
-  static CJNIFile getExternalStorageDirectory();
-  static CJNIFile getExternalStoragePublicDirectory(const std::string &type);
+  static std::string  getExternalStorageState();
+  static CJNIFile     getExternalStorageDirectory();
+  static CJNIFile     getExternalStoragePublicDirectory(const std::string &type);
+
 protected:
   CJNIEnvironment();
   ~CJNIEnvironment(){};
index 2eeaf2a..9f320cb 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "File.h"
 #include "jutils/jutils-details.hpp"
 
 using namespace jni;
+
 std::string CJNIFile::getAbsolutePath()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getAbsolutePath", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getAbsolutePath", "()Ljava/lang/String;"));
 }
index 63b8897..7e272f7 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIFile : public CJNIBase
 {
 public:
   CJNIFile();
-  ~CJNIFile(){};
   CJNIFile(const jni::jhobject &file) : CJNIBase(file){};
+  ~CJNIFile(){};
 
   std::string getAbsolutePath();
 };
index b4a0cf0..a9352bd 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "Intent.h"
 #include "jutils/jutils-details.hpp"
 #include "URI.h"
@@ -28,90 +29,121 @@ CJNIIntent::CJNIIntent(const std::string &action) : CJNIBase("android/content/In
   if(action.empty())
     m_object = new_object(GetClassName());
   else
-    m_object = new_object(GetClassName(), "<init>", "(Ljava/lang/String;)V", jcast<jhstring>(action));
+    m_object = new_object(GetClassName(),
+      "<init>", "(Ljava/lang/String;)V",
+      jcast<jhstring>(action));
 }
 
 std::string CJNIIntent::getAction()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getAction", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getAction", "()Ljava/lang/String;"));
 }
 
 std::string CJNIIntent::getDataString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getDataString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getDataString", "()Ljava/lang/String;"));
 }
 
 std::string CJNIIntent::getPackage()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getPackage", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getPackage", "()Ljava/lang/String;"));
 }
 
 std::string CJNIIntent::getType()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getType", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getType", "()Ljava/lang/String;"));
 }
 
 int CJNIIntent::getIntExtra(const std::string &name, int defaultValue)
 {
-  return call_method<jint>(m_object, "getIntExtra", "(Ljava/lang/String;I)I", jcast<jhstring>(name), defaultValue);
+  return call_method<jint>(m_object,
+    "getIntExtra", "(Ljava/lang/String;I)I",
+    jcast<jhstring>(name), defaultValue);
 }
 
 bool CJNIIntent::hasExtra(const std::string &name)
 {
-  return call_method<jboolean>(m_object, "hasExtra", "(Ljava/lang/String;)Z", jcast<jhstring>(name));
+  return call_method<jboolean>(m_object,
+    "hasExtra", "(Ljava/lang/String;)Z",
+    jcast<jhstring>(name));
 }
 
 bool CJNIIntent::hasCategory(const std::string &category)
 {
-  return call_method<jboolean>(m_object, "hasCategory", "(Ljava/lang/String;)Z", jcast<jhstring>(category));
+  return call_method<jboolean>(m_object,
+    "hasCategory", "(Ljava/lang/String;)Z",
+    jcast<jhstring>(category));
 }
 
 void CJNIIntent::addFlags(int flags)
 {
-  call_method<jhobject>(m_object, "addFlags", "(I;)Landroid/content/Intent;", flags);
+  call_method<jhobject>(m_object,
+    "addFlags", "(I;)Landroid/content/Intent;",
+    flags);
 }
 
 void CJNIIntent::addCategory(const std::string &category)
 {
-  call_method<jhstring>(m_object, "addCategory", "(Ljava/lang/String;)Landroid/content/Intent;", jcast<jhstring>(category));
+  call_method<jhstring>(m_object,
+    "addCategory", "(Ljava/lang/String;)Landroid/content/Intent;",
+    jcast<jhstring>(category));
 }
 
 void CJNIIntent::setAction(const std::string &action)
 {
-  call_method<jhobject>(m_object, "setAction", "(Ljava/lang/String;)Landroid/content/Intent;", jcast<jhstring>(action));
+  call_method<jhobject>(m_object,
+    "setAction", "(Ljava/lang/String;)Landroid/content/Intent;",
+    jcast<jhstring>(action));
 }
 
 void CJNIIntent::setClassName(const std::string &packageName, const std::string &className)
 {
-  call_method<jhobject>(m_object, "setClassName", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;", jcast<jhstring>(packageName), jcast<jhstring>(className));
+  call_method<jhobject>(m_object,
+    "setClassName", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
+    jcast<jhstring>(packageName), jcast<jhstring>(className));
 }
 
 void CJNIIntent::setData(const std::string &uri)
 {
-  call_method<jhobject>(m_object, "setData", "(Landroid/net/Uri;)Landroid/content/Intent;", jcast<jhstring>(uri));
+  call_method<jhobject>(m_object,
+    "setData", "(Landroid/net/Uri;)Landroid/content/Intent;",
+    jcast<jhstring>(uri));
 }
 
 void CJNIIntent::setDataAndType(const CJNIURI &uri, const std::string &type)
 {
-  call_method<jhobject>(m_object, "setDataAndType", "(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;", uri.get_raw(), jcast<jhstring>(type));
+  call_method<jhobject>(m_object,
+    "setDataAndType", "(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;",
+    uri.get_raw(), jcast<jhstring>(type));
 }
 
 void CJNIIntent::setFlags(int flags)
 {
-  call_method<jhobject>(m_object, "setFlags", "(I;)Landroid/content/Intent;", flags);
+  call_method<jhobject>(m_object,
+    "setFlags", "(I;)Landroid/content/Intent;",
+    flags);
 }
 
 void CJNIIntent::setPackage(const std::string &packageName)
 {
-  call_method<jhobject>(m_object, "setPackage", "(Ljava/lang/String;)Landroid/content/Intent;", jcast<jhstring>(packageName));
+  call_method<jhobject>(m_object,
+    "setPackage", "(Ljava/lang/String;)Landroid/content/Intent;",
+    jcast<jhstring>(packageName));
 }
 
 void CJNIIntent::setType(const std::string &type)
 {
-  call_method<jhobject>(m_object, "setType", "(Ljava/lang/String;)Landroid/content/Intent;", jcast<jhstring>(type));
+  call_method<jhobject>(m_object,
+    "setType", "(Ljava/lang/String;)Landroid/content/Intent;",
+    jcast<jhstring>(type));
 }
 
 CJNIURI CJNIIntent::getData() const
 {
-  return (CJNIURI)call_method<jhobject>(m_object, "getData","()Landroid/net/Uri;");
+  return (CJNIURI)call_method<jhobject>(m_object,
+    "getData","()Landroid/net/Uri;");
 }
index d69c7b5..cb30b56 100644 (file)
@@ -18,6 +18,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIURI;
@@ -25,15 +26,15 @@ class CJNIIntent : public CJNIBase
 {
 public:
   CJNIIntent(const std::string &action = "");
-  ~CJNIIntent(){};
-  CJNIIntent(const jni::jhobject &intent) : CJNIBase(intent){};
+  CJNIIntent(const jni::jhobject &intent) : CJNIBase(intent) {};
+  ~CJNIIntent() {};
 
   std::string getAction();
   std::string getDataString();
   std::string getPackage();
   std::string getType();
 
-  int getIntExtra(const std::string &name, int defaultValue);
+  int  getIntExtra(const std::string &name, int defaultValue);
 
   bool hasExtra(const std::string &name);
   bool hasCategory(const std::string &category);
index 98684f5..68b1309 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "IntentFilter.h"
 #include "jutils/jutils-details.hpp"
 
@@ -29,15 +30,21 @@ CJNIIntentFilter::CJNIIntentFilter() : CJNIBase("android/content/IntentFilter")
 
 CJNIIntentFilter::CJNIIntentFilter(const std::string &action) : CJNIBase("android/content/IntentFilter")
 {
-  m_object = new_object(GetClassName(), "<init>", "(Ljava/lang/String;)V", jcast<jhstring>(action));
+  m_object = new_object(GetClassName(),
+    "<init>", "(Ljava/lang/String;)V",
+    jcast<jhstring>(action));
 }
 
 void CJNIIntentFilter::addAction(std::string action)
 {
-  call_method<void>(m_object, "addAction", "(Ljava/lang/String;)V", jcast<jhstring>(action));
+  call_method<void>(m_object,
+    "addAction", "(Ljava/lang/String;)V",
+    jcast<jhstring>(action));
 }
 
 void CJNIIntentFilter::addDataScheme(std::string scheme)
 {
-  call_method<void>(m_object, "addDataScheme", "(Ljava/lang/String;)V", jcast<jhstring>(scheme));
+  call_method<void>(m_object,
+    "addDataScheme", "(Ljava/lang/String;)V",
+    jcast<jhstring>(scheme));
 }
index d45320e..2a40ec0 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIIntentFilter : public CJNIBase
 {
 public:
   CJNIIntentFilter();
+  CJNIIntentFilter(const jni::jhobject &object) : CJNIBase(object) {};
   CJNIIntentFilter(const std::string &action);
+  ~CJNIIntentFilter() {};
+
   void addDataScheme(std::string scheme);
   void addAction(std::string action);
-
-  ~CJNIIntentFilter(){};
-  CJNIIntentFilter(const jni::jhobject &object) : CJNIBase(object){};
 };
index f566f01..1b036c0 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
+
 using namespace jni;
+
 CJNIBase::CJNIBase(std::string classname)
 {
   m_className = classname;
index 48b29be..94fccb7 100644 (file)
@@ -18,6 +18,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "jutils/jutils.hpp"
 
 class CJNIBase
index f9f2559..9a48551 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "List.h"
 #include "jutils/jutils-details.hpp"
 #include "ScanResult.h"
@@ -28,13 +29,16 @@ using namespace jni;
 template <typename T>
 T CJNIList<T>::get(int index)
 {
-  return (T)call_method<jhobject>(m_object, "get", "(I)Ljava/lang/Object;", index);
+  return (T)call_method<jhobject>(m_object,
+    "get", "(I)Ljava/lang/Object;",
+    index);
 }
 
 template <typename T>
 int CJNIList<T>::size()
 {
-  return m_object.get() ? call_method<jint>(m_object, "size", "()I") : 0;
+  return m_object.get() ? call_method<jint>(m_object,
+    "size", "()I") : 0;
 }
 
 template class CJNIList<CJNIScanResult>;
index 1c4d755..5fcf8c3 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 template <typename T>
 class CJNIList : public CJNIBase
 {
 public:
-  ~CJNIList(){};
   CJNIList(const jni::jhobject &object) : CJNIBase(object){};
-  T get(int index);
+  ~CJNIList(){};
+
+  T   get(int index);
   int size();
+
 private:
   CJNIList();
 };
index 322c7f4..e3832fa 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "MediaStore.h"
 #include "jutils/jutils-details.hpp"
 
@@ -29,14 +30,15 @@ std::string CJNIMediaStoreMediaColumns::TITLE;
 std::string CJNIMediaStoreMediaColumns::DATE_ADDED;
 std::string CJNIMediaStoreMediaColumns::DATE_MODIFIED;
 std::string CJNIMediaStoreMediaColumns::MIME_TYPE;
+
 void CJNIMediaStoreMediaColumns::PopulateStaticFields()
 {
   jhclass clazz = find_class("android/provider/MediaStore$MediaColumns");
-  DATA = (jcast<std::string>(get_static_field<jhstring>(clazz, "DATA")));
-  SIZE = (jcast<std::string>(get_static_field<jhstring>(clazz, "SIZE")));
-  DISPLAY_NAME = (jcast<std::string>(get_static_field<jhstring>(clazz, "DISPLAY_NAME")));
-  TITLE = (jcast<std::string>(get_static_field<jhstring>(clazz, "TITLE")));
-  DATE_ADDED = (jcast<std::string>(get_static_field<jhstring>(clazz, "DATE_ADDED")));
+  DATA          = (jcast<std::string>(get_static_field<jhstring>(clazz, "DATA")));
+  SIZE          = (jcast<std::string>(get_static_field<jhstring>(clazz, "SIZE")));
+  DISPLAY_NAME  = (jcast<std::string>(get_static_field<jhstring>(clazz, "DISPLAY_NAME")));
+  TITLE         = (jcast<std::string>(get_static_field<jhstring>(clazz, "TITLE")));
+  DATE_ADDED    = (jcast<std::string>(get_static_field<jhstring>(clazz, "DATE_ADDED")));
   DATE_MODIFIED = (jcast<std::string>(get_static_field<jhstring>(clazz, "DATE_MODIFIED")));
-  MIME_TYPE = (jcast<std::string>(get_static_field<jhstring>(clazz, "MIME_TYPE")));
+  MIME_TYPE     = (jcast<std::string>(get_static_field<jhstring>(clazz, "MIME_TYPE")));
 }
index bfca88f..aa322e6 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "BaseColumns.h"
+
 class CJNIMediaStoreMediaColumns : public CJNIBaseColumns
 {
 public:
+  static void PopulateStaticFields();
+
   static std::string DATA; 
   static std::string SIZE; 
   static std::string DISPLAY_NAME;
@@ -30,7 +34,7 @@ public:
   static std::string DATE_ADDED;
   static std::string DATE_MODIFIED;
   static std::string MIME_TYPE;
-  static void PopulateStaticFields();
+
 private:
   CJNIMediaStoreMediaColumns();
 };
@@ -38,6 +42,6 @@ private:
 class CJNIMediaStore : public CJNIBase
 {
 public:
-  ~CJNIMediaStore(){};
-  CJNIMediaStore(const jni::jhobject &object) : CJNIBase(object){};
+  CJNIMediaStore(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIMediaStore() {};
 };
index 85bb51b..7795f7a 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "NetworkInfo.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,76 +25,91 @@ using namespace jni;
 
 int CJNINetworkInfo::getType() const
 {
-  return call_method<jint>(m_object, "getType", "()I");
+  return call_method<jint>(m_object,
+    "getType", "()I");
 }
 
 int CJNINetworkInfo::getSubtype() const
 {
-  return call_method<jint>(m_object, "getSubtype", "()I");
+  return call_method<jint>(m_object,
+    "getSubtype", "()I");
 }
 
 std::string CJNINetworkInfo::getTypeName() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getTypeName", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getTypeName", "()Ljava/lang/String;"));
 }
 
 std::string CJNINetworkInfo::getSubtypeName() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getTypeName", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getTypeName", "()Ljava/lang/String;"));
 }
 
 bool CJNINetworkInfo::isConnectedOrConnecting() const
 {
-  return call_method<jboolean>(m_object, "isConnectedOrConnecting", "()Z");
+  return call_method<jboolean>(m_object,
+    "isConnectedOrConnecting", "()Z");
 }
 
 bool CJNINetworkInfo::isConnected() const
 {
-  return call_method<jboolean>(m_object, "isConnected", "()Z");
+  return call_method<jboolean>(m_object,
+    "isConnected", "()Z");
 }
 
 bool CJNINetworkInfo::isAvailable() const
 {
-  return call_method<jboolean>(m_object, "isAvailable", "()Z");
+  return call_method<jboolean>(m_object,
+    "isAvailable", "()Z");
 }
 
 bool CJNINetworkInfo::isFailover() const
 {
-  return call_method<jboolean>(m_object, "isFailover", "()Z");
+  return call_method<jboolean>(m_object,
+    "isFailover", "()Z");
 }
 
 bool CJNINetworkInfo::isRoaming() const
 {
-  return call_method<jboolean>(m_object, "isRoaming", "()Z");
+  return call_method<jboolean>(m_object,
+    "isRoaming", "()Z");
 }
 
 CJNINetworkInfoState CJNINetworkInfo::getState() const
 {
-  return (CJNINetworkInfoState)call_method<jhobject>(m_object, "getState", "()Landroid/net/NetworkInfo$State;");
+  return call_method<jhobject>(m_object,
+    "getState", "()Landroid/net/NetworkInfo$State;");
 }
 
 CJNINetworkInfoDetailedState CJNINetworkInfo::getDetailedState() const
 {
-  return (CJNINetworkInfoDetailedState)call_method<jhobject>(m_object, "getDetailedState", "()Landroid/net/NetworkInfo$DetailedState;");
+  return call_method<jhobject>(m_object,
+    "getDetailedState", "()Landroid/net/NetworkInfo$DetailedState;");
 }
 
 std::string CJNINetworkInfo::getReason() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getReason", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getReason", "()Ljava/lang/String;"));
 }
 
 std::string CJNINetworkInfo::getExtraInfo() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getExtraInfo", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getExtraInfo", "()Ljava/lang/String;"));
 }
 
 std::string CJNINetworkInfo::toString() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 
 int CJNINetworkInfo::describeContents() const
 {
-  return call_method<jint>(m_object, "describeContents", "()I");
+  return call_method<jint>(m_object,
+    "describeContents", "()I");
 }
 
index 5fd5066..ab51cad 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "Enum.h"
 
 class CJNINetworkInfoState : public CJNIEnum
 {
 public:
-  ~CJNINetworkInfoState(){};
-  CJNINetworkInfoState(const jni::jhobject &object) : CJNIEnum(object){};
+  CJNINetworkInfoState(const jni::jhobject &object) : CJNIEnum(object) {};
+  ~CJNINetworkInfoState() {};
+
 private:
   CJNINetworkInfoState();
 };
@@ -33,8 +35,9 @@ private:
 class CJNINetworkInfoDetailedState : public CJNIEnum
 {
 public:
-  ~CJNINetworkInfoDetailedState(){};
-  CJNINetworkInfoDetailedState(const jni::jhobject &object) : CJNIEnum(object){};
+  CJNINetworkInfoDetailedState(const jni::jhobject &object) : CJNIEnum(object) {};
+  ~CJNINetworkInfoDetailedState() {};
+
 private:
   CJNINetworkInfoDetailedState();
 };
@@ -42,25 +45,25 @@ private:
 class CJNINetworkInfo : public CJNIBase
 {
 public:
+  CJNINetworkInfo();
   CJNINetworkInfo(const jni::jhobject &object) : CJNIBase(object){};
   ~CJNINetworkInfo(){};
-  int getType() const;
-  int getSubtype() const;
+
+  int         getType()     const;
+  int         getSubtype()  const;
   std::string getTypeName() const;
   std::string getSubtypeName() const;
-  bool isConnectedOrConnecting() const;
-  bool isConnected() const;
-  bool isAvailable() const;
-  bool isFailover() const;
-  bool isRoaming() const;
+  bool        isConnectedOrConnecting() const;
+  bool        isConnected() const;
+  bool        isAvailable() const;
+  bool        isFailover()  const;
+  bool        isRoaming()   const;
 
   CJNINetworkInfoState getState() const;
   CJNINetworkInfoDetailedState getDetailedState() const;
 
-  std::string getReason() const;
+  std::string getReason()   const;
   std::string getExtraInfo() const;
-  std::string toString() const;
-  int describeContents() const;
-  CJNINetworkInfo();
-private:
+  std::string toString()    const;
+  int         describeContents() const;
 };
index cc21a2e..4f85da9 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "PackageManager.h"
 #include "Intent.h"
 #include "Drawable.h"
@@ -30,27 +31,35 @@ int CJNIPackageManager::GET_ACTIVITIES(0);
 
 void CJNIPackageManager::PopulateStaticFields()
 {
-  jhclass clazz = find_class("android/content/pm/PackageManager");
+  jhclass clazz  = find_class("android/content/pm/PackageManager");
   GET_ACTIVITIES = (get_static_field<int>(clazz, "GET_ACTIVITIES"));
 }
 
 CJNIIntent CJNIPackageManager::getLaunchIntentForPackage(const std::string &package)
 {
-  return (CJNIIntent)call_method<jhobject>(m_object, "getLaunchIntentForPackage", "(Ljava/lang/String;)Landroid/content/Intent;", jcast<jhstring>(package));
+  return call_method<jhobject>(m_object,
+    "getLaunchIntentForPackage", "(Ljava/lang/String;)Landroid/content/Intent;",
+    jcast<jhstring>(package));
 }
 
 CJNIDrawable CJNIPackageManager::getApplicationIcon(const std::string &package)
 {
-  return (CJNIDrawable)call_method<jhobject>(m_object, "getApplicationIcon", "(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;", jcast<jhstring>(package));
+  return call_method<jhobject>(m_object,
+    "getApplicationIcon", "(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;",
+    jcast<jhstring>(package));
 }
 
 CJNICharSequence CJNIPackageManager::getApplicationLabel(const CJNIApplicationInfo &info)
 {
-  return (CJNICharSequence)call_method<jhobject>(m_object, "getApplicationLabel", "(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;", info.get_raw());
+  return call_method<jhobject>(m_object,
+    "getApplicationLabel", "(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;",
+    info.get_raw());
 }
 
 CJNIList<CJNIApplicationInfo> CJNIPackageManager::getInstalledApplications(int flags)
 {
-  return (CJNIList<CJNIApplicationInfo>)call_method<jhobject>(m_object, "getInstalledApplications", "(I)Ljava/util/List;", flags);
+  return call_method<jhobject>(m_object,
+    "getInstalledApplications", "(I)Ljava/util/List;",
+    flags);
 }
 
index 7bf2d01..9873c13 100644 (file)
@@ -18,6 +18,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "List.h"
 
@@ -25,19 +26,21 @@ class CJNIIntent;
 class CJNIDrawable;
 class CJNIApplicationInfo;
 class CJNICharSequence;
+
 class CJNIPackageManager : public CJNIBase
 {
 public:
   CJNIPackageManager(const jni::jhobject &object) : CJNIBase(object) {};
-  ~CJNIPackageManager(){};
+  ~CJNIPackageManager() {};
 
-  CJNIIntent getLaunchIntentForPackage(const std::string &package);
-  CJNIDrawable getApplicationIcon(const std::string &package);
+  CJNIIntent        getLaunchIntentForPackage(const std::string &package);
+  CJNIDrawable      getApplicationIcon(const std::string &package);
   CJNIList<CJNIApplicationInfo> getInstalledApplications(int flags);
-  CJNICharSequence getApplicationLabel(const CJNIApplicationInfo &info);
+  CJNICharSequence  getApplicationLabel(const CJNIApplicationInfo &info);
+
+  static void       PopulateStaticFields();
+  static int        GET_ACTIVITIES;
 
-  static void PopulateStaticFields();
-  static int GET_ACTIVITIES;
 private:
   CJNIPackageManager();
 };
index 6ce56d7..4bc6f3a 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "PowerManager.h"
-#include "jutils/jutils-details.hpp"
 #include "WakeLock.h"
+#include "jutils/jutils-details.hpp"
 
 using namespace jni;
 
@@ -27,22 +28,27 @@ int CJNIPowerManager::FULL_WAKE_LOCK(0);
 
 void CJNIPowerManager::PopulateStaticFields()
 {
-  jhclass clazz = find_class("android/os/PowerManager");
+  jhclass clazz  = find_class("android/os/PowerManager");
   FULL_WAKE_LOCK = (get_static_field<int>(clazz, "FULL_WAKE_LOCK"));
 }
 
 CJNIWakeLock CJNIPowerManager::newWakeLock(const std::string &name)
 {
-  return (CJNIWakeLock)call_method<jhobject>(m_object, "newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;", \
-                       FULL_WAKE_LOCK, jcast<jhstring>(name));
+  return call_method<jhobject>(m_object,
+    "newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;",
+    FULL_WAKE_LOCK, jcast<jhstring>(name));
 }
 
 void CJNIPowerManager::goToSleep(int64_t timestamp)
 {
-  call_method<void>(m_object, "goToSleep", "(J)V", (jlong)timestamp);
+  call_method<void>(m_object,
+    "goToSleep", "(J)V",
+    (jlong)timestamp);
 }
 
 void CJNIPowerManager::reboot(const std::string &reason)
 {
-  call_method<void>(m_object, "reboot", "(Ljava/lang/String;)V", jcast<jhstring>(reason));
+  call_method<void>(m_object,
+    "reboot", "(Ljava/lang/String;)V",
+    jcast<jhstring>(reason));
 }
index 8297614..19677d2 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIWakeLock;
+
 class CJNIPowerManager : public CJNIBase
 {
 public:
-  CJNIWakeLock newWakeLock(const std::string &name);
-  void reboot(const std::string &reason);
-  void goToSleep(int64_t timestamp);
+  CJNIPowerManager(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIPowerManager() {};
 
-  static void PopulateStaticFields();
-  CJNIPowerManager(const jni::jhobject &object) : CJNIBase(object){};
-  ~CJNIPowerManager(){};
+  CJNIWakeLock  newWakeLock(const std::string &name);
+  void          reboot(const std::string &reason);
+  void          goToSleep(int64_t timestamp);
+
+  static void   PopulateStaticFields();
 
 private:
   CJNIPowerManager();
+
   static int FULL_WAKE_LOCK;
 };
index a3572b4..b1b46a8 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "ScanResult.h"
 #include "jutils/jutils-details.hpp"
 
 using namespace jni;
 
 CJNIScanResult::CJNIScanResult(const jhobject &object) : CJNIBase(object)
-  ,SSID(jcast<std::string>(get_field<jhstring>(m_object, "SSID")))
-  ,BSSID(jcast<std::string>(get_field<jhstring>(m_object, "BSSID")))
+  ,SSID(        jcast<std::string>(get_field<jhstring>(m_object, "SSID")))
+  ,BSSID(       jcast<std::string>(get_field<jhstring>(m_object, "BSSID")))
   ,capabilities(jcast<std::string>(get_field<jhstring>(m_object, "capabilities")))
-  ,level(get_field<int>(m_object, "level"))
-  ,frequency(get_field<int>(m_object, "frequency"))
+  ,level(       get_field<int>(m_object, "level"))
+  ,frequency(   get_field<int>(m_object, "frequency"))
 {
 }
 
 std::string CJNIScanResult::toString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 
 int CJNIScanResult::describeContents()
 {
-  return call_method<jint>(m_object, "describeContents", "()I");
+  return call_method<jint>(m_object,
+    "describeContents", "()I");
 }
index dcd5759..3f12951 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIScanResult : public CJNIBase
 {
 public:
   CJNIScanResult(const jni::jhobject &object);
+  ~CJNIScanResult(){};
+
   std::string SSID;
   std::string BSSID;
   std::string capabilities;
-  int level;
-  int frequency;
+  int         level;
+  int         frequency;
   std::string toString();
-  int describeContents();
+  int         describeContents();
 
-  ~CJNIScanResult(){};
 private:
   CJNIScanResult();
 };
+
 typedef std::vector<CJNIScanResult> CJNIScanResults;
index 5011e87..8ec7534 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "StatFs.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,31 +25,39 @@ using namespace jni;
 
 CJNIStatFs::CJNIStatFs(const std::string &path) : CJNIBase("android/os/StatFs")
 {
-  m_object = new_object(GetClassName(), "<init>", "(Ljava/lang/String;)V", jcast<jhstring>(path));
+  m_object = new_object(GetClassName(), "<init>",
+    "(Ljava/lang/String;)V",
+    jcast<jhstring>(path));
   m_object.setGlobal();
 }
 
 void CJNIStatFs::restat(const std::string &path)
 {
-  call_method<void>(m_object, "restat", "(Ljava/lang/String;)V", jcast<jhstring>(path));
+  call_method<void>(m_object,
+    "restat", "(Ljava/lang/String;)V",
+    jcast<jhstring>(path));
 }
 
 int CJNIStatFs::getBlockSize()
 {
-  return call_method<jint>(m_object, "getBlockSize", "()I");
+  return call_method<jint>(m_object,
+    "getBlockSize", "()I");
 }
 
 int CJNIStatFs::getBlockCount()
 {
-  return call_method<jint>(m_object, "getBlockCount", "()I");
+  return call_method<jint>(m_object,
+    "getBlockCount", "()I");
 }
 
 int CJNIStatFs::getFreeBlocks()
 {
-  return call_method<jint>(m_object, "getFreeBlocks", "()I");
+  return call_method<jint>(m_object,
+    "getFreeBlocks", "()I");
 }
 
 int CJNIStatFs::getAvailableBlocks()
 {
-  return call_method<jint>(m_object, "getAvailableBlocks", "()I");
+  return call_method<jint>(m_object,
+    "getAvailableBlocks", "()I");
 }
index 9bc029e..9fccd33 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIStatFs : public CJNIBase
 {
 public:
   CJNIStatFs(const std::string &path);
-  CJNIStatFs(const jni::jhobject &object) : CJNIBase(object){};
-  ~CJNIStatFs(){};
-  void restat(const std::string &path);
-  int getBlockSize();
-  int getBlockCount();
-  int getFreeBlocks();
-  int getAvailableBlocks();
+  CJNIStatFs(const jni::jhobject &object) : CJNIBase(object) {};
+  ~CJNIStatFs() {};
+
+  void  restat(const std::string &path);
+  int   getBlockSize();
+  int   getBlockCount();
+  int   getFreeBlocks();
+  int   getAvailableBlocks();
 };
index a910d34..79a7150 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "System.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,20 +25,28 @@ using namespace jni;
 
 std::string CJNISystem::getProperty(const std::string &property)
 {
-  return jcast<std::string>(call_static_method<jhstring>("java/lang/System", "getProperty", "(Ljava/lang/String;)Ljava/lang/String;", jcast<jhstring>(property)));
+  return jcast<std::string>(call_static_method<jhstring>("java/lang/System",
+    "getProperty", "(Ljava/lang/String;)Ljava/lang/String;",
+    jcast<jhstring>(property)));
 }
 
 std::string CJNISystem::getProperty(const std::string &property, const std::string &defaultValue)
 {
-  return jcast<std::string>(call_static_method<jhstring>("java/lang/System", "getProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", jcast<jhstring>(property), jcast<jhstring>(defaultValue)));
+  return jcast<std::string>(call_static_method<jhstring>("java/lang/System",
+    "getProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
+    jcast<jhstring>(property), jcast<jhstring>(defaultValue)));
 }
 
 std::string CJNISystem::setProperty(const std::string &property, const std::string &defaultValue)
 {
-  return jcast<std::string>(call_static_method<jhstring>("java/lang/System", "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", jcast<jhstring>(property), jcast<jhstring>(defaultValue)));
+  return jcast<std::string>(call_static_method<jhstring>("java/lang/System",
+    "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
+    jcast<jhstring>(property), jcast<jhstring>(defaultValue)));
 }
 
 std::string CJNISystem::clearProperty(const std::string &property)
 {
-  return jcast<std::string>(call_static_method<jhstring>("java/lang/System", "clearProperty", "(Ljava/lang/String;)Ljava/lang/String;", jcast<jhstring>(property)));
+  return jcast<std::string>(call_static_method<jhstring>("java/lang/System",
+    "clearProperty", "(Ljava/lang/String;)Ljava/lang/String;",
+    jcast<jhstring>(property)));
 }
index b884f74..58fb496 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNISystem
 {
 public:
-  static std::string getProperty(const std::string &property);
-  static std::string getProperty(const std::string &property, const std::string &defaultValue);
-  static std::string setProperty(const std::string &property, const std::string &defaultValue);
+  static std::string getProperty(  const std::string &property);
+  static std::string getProperty(  const std::string &property, const std::string &defaultValue);
+  static std::string setProperty(  const std::string &property, const std::string &defaultValue);
   static std::string clearProperty(const std::string &property);
+
 private:
   CJNISystem();
-  ~CJNISystem(){};
-
+  ~CJNISystem() {};
 };
index 1080e4a..4906554 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "SystemClock.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,6 +25,7 @@ using namespace jni;
 
 int64_t CJNISystemClock::uptimeMillis()
 {
-  return call_static_method<jlong>("android/os/SystemClock", "uptimeMillis", "()J");
+  return call_static_method<jlong>("android/os/SystemClock",
+    "uptimeMillis", "()J");
 }
 
index 3b86fde..c82dc78 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
-// This class contains only static methods, so no need to inherit from JNIBase.
+
 #include <stdint.h>
+
+// This class contains only static methods, so no need to inherit from JNIBase.
 class CJNISystemClock
 {
 public:
   static int64_t uptimeMillis();
+
 private:
-  CJNISystemClock(){};
-  ~CJNISystemClock(){};
+  CJNISystemClock()  {};
+  ~CJNISystemClock() {};
 };
index df9f2eb..88bb122 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "URI.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,25 +25,31 @@ using namespace jni;
 
 CJNIURI CJNIURI::parse(std::string uriString)
 {
-  return (CJNIURI)call_static_method<jhobject>("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", jcast<jhstring>(uriString));
+  return call_static_method<jhobject>("android/net/Uri",
+    "parse", "(Ljava/lang/String;)Landroid/net/Uri;",
+    jcast<jhstring>(uriString));
 }
 
 std::string CJNIURI::getScheme() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getScheme", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getScheme", "()Ljava/lang/String;"));
 }
 
 std::string CJNIURI::toString() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 
 std::string CJNIURI::getLastPathSegment() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getLastPathSegment", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getLastPathSegment", "()Ljava/lang/String;"));
 }
 
 std::string CJNIURI::getPath() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getPath", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getPath", "()Ljava/lang/String;"));
 }
index af0c02f..1befc34 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIURI : public CJNIBase
 {
-  public:
-  CJNIURI(const jni::jhobject &uri) : CJNIBase(uri){};
+public:
+  CJNIURI(const jni::jhobject &uri) : CJNIBase(uri) {};
+  ~CJNIURI() {};
+
   std::string getScheme() const;
-  std::string toString() const;
+  std::string toString()  const;
   std::string getLastPathSegment() const;
-  std::string getPath() const;
+  std::string getPath()   const;
   static CJNIURI parse(std::string uriString);
-  ~CJNIURI(){};
+
 private:
   CJNIURI();
 };
index 6dea8a9..5058026 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "WakeLock.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,11 +25,13 @@ using namespace jni;
 
 void CJNIWakeLock::acquire()
 {
-  call_method<void>(m_object, "acquire", "()V");
+  call_method<void>(m_object,
+    "acquire", "()V");
 }
 
 void CJNIWakeLock::release()
 {
-  call_method<void>(m_object, "release", "()V");
+  call_method<void>(m_object,
+    "release", "()V");
 }
 
index cd732da..69773bb 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 
 class CJNIWakeLock : public CJNIBase
 {
 public:
-  CJNIWakeLock(const jni::jhobject &wakelock) : CJNIBase(wakelock){};
-  ~CJNIWakeLock(){};
+  CJNIWakeLock(const jni::jhobject &wakelock) : CJNIBase(wakelock) {};
+  ~CJNIWakeLock() {};
+
   void acquire();
   void release();
+
 protected:
   CJNIWakeLock();
 };
index 5f147de..62a7f9e 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "WifiConfiguration.h"
 #include "jutils/jutils-details.hpp"
 
 using namespace jni;
 
 CJNIWifiConfiguration::CJNIWifiConfiguration(const jhobject &object) : CJNIBase(object)
-  ,networkId(get_field<jint>(m_object, "networkId"))
-  ,status(get_field<jint>(m_object, "status"))
-  ,SSID(jcast<std::string>(get_field<jhstring>(m_object, "SSID")))
-  ,BSSID(jcast<std::string>(get_field<jhstring>(m_object, "BSSID")))
-  ,preSharedKey(jcast<std::string>(get_field<jhstring>(m_object, "preSharedKey")))
-  ,wepTxKeyIndex(get_field<jint>(m_object, "wepTxKeyIndex"))
-  ,priority(get_field<jint>(m_object, "priority"))
-  ,hiddenSSID(get_field<jboolean>(m_object, "hiddenSSID"))
-  ,allowedKeyManagement(get_field<jhobject>(m_object, "allowedKeyManagement", "Ljava/util/BitSet;"))
-  ,allowedProtocols(get_field<jhobject>(m_object, "allowedProtocols", "Ljava/util/BitSet;"))
+  ,networkId(             get_field<jint>(m_object, "networkId"))
+  ,status(                get_field<jint>(m_object, "status"))
+  ,SSID(                  jcast<std::string>(get_field<jhstring>(m_object, "SSID")))
+  ,BSSID(                 jcast<std::string>(get_field<jhstring>(m_object, "BSSID")))
+  ,preSharedKey(          jcast<std::string>(get_field<jhstring>(m_object, "preSharedKey")))
+  ,wepTxKeyIndex(         get_field<jint>(m_object, "wepTxKeyIndex"))
+  ,priority(              get_field<jint>(m_object, "priority"))
+  ,hiddenSSID(            get_field<jboolean>(m_object, "hiddenSSID"))
+  ,allowedKeyManagement(  get_field<jhobject>(m_object, "allowedKeyManagement", "Ljava/util/BitSet;"))
+  ,allowedProtocols(      get_field<jhobject>(m_object, "allowedProtocols", "Ljava/util/BitSet;"))
   ,allowedPairwiseCiphers(get_field<jhobject>(m_object, "allowedPairwiseCiphers", "Ljava/util/BitSet;"))
-  ,allowedGroupCiphers(get_field<jhobject>(m_object, "allowedGroupCiphers", "Ljava/util/BitSet;"))
+  ,allowedGroupCiphers(   get_field<jhobject>(m_object, "allowedGroupCiphers", "Ljava/util/BitSet;"))
 {
 }
 
 std::string CJNIWifiConfiguration::toString()
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 
 int CJNIWifiConfiguration::describeContents()
 {
-  return call_method<jint>(m_object, "describeContents", "()I");
+  return call_method<jint>(m_object,
+    "describeContents", "()I");
 }
index 5855aea..7e4b1e1 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "BitSet.h"
+
 class CJNIWifiConfiguration : public CJNIBase
 {
 public:
   CJNIWifiConfiguration(const jni::jhobject &object);
-  ~CJNIWifiConfiguration(){};
+  ~CJNIWifiConfiguration() {};
 
-  int networkId;
-  int status;
+  int         networkId;
+  int         status;
   std::string SSID;
   std::string BSSID;
   std::string preSharedKey;
 //  std::string[] wepKeys;
-  int wepTxKeyIndex;
-  int priority;
-  bool hiddenSSID;
-  CJNIBitSet allowedKeyManagement;
-  CJNIBitSet allowedProtocols;
-  CJNIBitSet allowedAuthAlgorithms;
-  CJNIBitSet allowedPairwiseCiphers;
-  CJNIBitSet allowedGroupCiphers;
+  int         wepTxKeyIndex;
+  int         priority;
+  bool        hiddenSSID;
+  CJNIBitSet  allowedKeyManagement;
+  CJNIBitSet  allowedProtocols;
+  CJNIBitSet  allowedAuthAlgorithms;
+  CJNIBitSet  allowedPairwiseCiphers;
+  CJNIBitSet  allowedGroupCiphers;
 
   std::string toString();
-  int describeContents();
+  int         describeContents();
 
 private:
   CJNIWifiConfiguration();
index 3c895db..553f6b9 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "WifiInfo.h"
 #include "jutils/jutils-details.hpp"
 
@@ -24,60 +25,73 @@ using namespace jni;
 
 std::string CJNIWifiInfo::getSSID() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getSSID", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getSSID", "()Ljava/lang/String;"));
 }
 
 std::string CJNIWifiInfo::getBSSID() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getBSSID", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getBSSID", "()Ljava/lang/String;"));
 }
 
 int CJNIWifiInfo::getRssi() const
 {
-  return call_method<jint>(m_object, "getRssi", "()I");
+  return call_method<jint>(m_object,
+    "getRssi", "()I");
 }
 
 int CJNIWifiInfo::getLinkSpeed() const
 {
-  return call_method<jint>(m_object, "getLinkSpeed", "()I");
+  return call_method<jint>(m_object,
+    "getLinkSpeed", "()I");
 }
 
 std::string CJNIWifiInfo::getMacAddress() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "getMacAddress", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "getMacAddress", "()Ljava/lang/String;"));
 }
 
 int CJNIWifiInfo::getNetworkId() const
 {
-  return call_method<jint>(m_object, "getNetworkId", "()I");
+  return call_method<jint>(m_object,
+    "getNetworkId", "()I");
 }
 
 int CJNIWifiInfo::getIpAddress() const
 {
-  return call_method<jint>(m_object,  "getIpAddress" , "()I");
+  return call_method<jint>(m_object,
+    "getIpAddress" , "()I");
 }
 
 bool CJNIWifiInfo::getHiddenSSID() const
 {
-  return call_method<jboolean>(m_object,  "getHiddenSSID" , "()Z");
+  return call_method<jboolean>(m_object,
+    "getHiddenSSID" , "()Z");
 }
 
 std::string CJNIWifiInfo::toString() const
 {
-  return jcast<std::string>(call_method<jhstring>(m_object, "toString", "()Ljava/lang/String;"));
+  return jcast<std::string>(call_method<jhstring>(m_object,
+    "toString", "()Ljava/lang/String;"));
 }
 
 int CJNIWifiInfo::describeContents() const
 {
-  return call_method<jint>(m_object,  "describeContents" , "()I");
+  return call_method<jint>(m_object,
+    "describeContents" , "()I");
 }
 
 CJNISupplicantState CJNIWifiInfo::getSupplicantState() const
 {
-  return call_method<jhobject>(m_object, "getSupplicantState", "()Landroid/net/wifi/SupplicantState;");
+  return call_method<jhobject>(m_object,
+    "getSupplicantState", "()Landroid/net/wifi/SupplicantState;");
 }
 
 CJNINetworkInfoDetailedState CJNIWifiInfo::getDetailedStateOf(const CJNISupplicantState &suppState)
 {
-  return call_static_method<jhobject>("android/net/wifi/WifiInfo", "getDetailedStateOf", "(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;", suppState.get_raw());
+  return call_static_method<jhobject>("android/net/wifi/WifiInfo",
+    "getDetailedStateOf", "(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;",
+    suppState.get_raw());
 }
index 504ad0f..2f8c338 100644 (file)
@@ -18,6 +18,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "Enum.h"
 #include "NetworkInfo.h"
@@ -25,8 +26,9 @@
 class CJNISupplicantState : public CJNIEnum
 {
 public:
-  ~CJNISupplicantState(){};
   CJNISupplicantState(const jni::jhobject &object) : CJNIEnum(object){};
+  ~CJNISupplicantState(){};
+
 private:
   CJNISupplicantState();
 };
@@ -36,18 +38,20 @@ class CJNIWifiInfo : public CJNIBase
 public:
   CJNIWifiInfo(const jni::jhobject &object) : CJNIBase(object){};
   ~CJNIWifiInfo(){};
-  std::string getSSID() const;
+
+  std::string getSSID()  const;
   std::string getBSSID() const;
-  int getRssi() const;
-  int getLinkSpeed() const;
+  int         getRssi()  const;
+  int         getLinkSpeed()  const;
   std::string getMacAddress() const;
-  int getNetworkId() const;
-  int getIpAddress() const;
-  bool getHiddenSSID() const;
+  int         getNetworkId()  const;
+  int         getIpAddress()  const;
+  bool        getHiddenSSID() const;
   std::string toString() const;
-  int describeContents() const;
+  int         describeContents() const;
   CJNISupplicantState getSupplicantState() const;
   static CJNINetworkInfoDetailedState getDetailedStateOf(const CJNISupplicantState &suppState);
+
 private:
   CJNIWifiInfo();
 };
index 8571bf8..0df4f97 100644 (file)
@@ -17,6 +17,7 @@
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "WifiManager.h"
 #include "DhcpInfo.h"
 #include "List.h"
@@ -30,93 +31,111 @@ using namespace jni;
 
 CJNIList<CJNIWifiConfiguration> CJNIWifiManager::getConfiguredNetworks()
 {
-  return (CJNIList<CJNIWifiConfiguration>)call_method<jhobject>(m_object, "getConfiguredNetworks" , "()Ljava/util/List;");
+  return call_method<jhobject>(m_object,
+    "getConfiguredNetworks" , "()Ljava/util/List;");
 }
 
 CJNIList<CJNIScanResult> CJNIWifiManager::getScanResults()
 {
-  return (CJNIList<CJNIScanResult>)call_method<jhobject>(m_object, "getScanResults" , "()Ljava/util/List;");
+  return call_method<jhobject>(m_object,
+    "getScanResults" , "()Ljava/util/List;");
 }
 
 bool CJNIWifiManager::removeNetwork(int netId)
 {
-  return call_method<jboolean>(m_object, "removeNetwork", "(I)Z", netId);
+  return call_method<jboolean>(m_object,
+    "removeNetwork", "(I)Z", netId);
 }
 
 bool CJNIWifiManager::enableNetwork(int netID, bool disableOthers)
 {
-  return call_method<jboolean>(m_object, "enableNetwork", "(IZ)Z", netID, disableOthers);
+  return call_method<jboolean>(m_object,
+    "enableNetwork", "(IZ)Z", netID, disableOthers);
 }
 
 bool CJNIWifiManager::disableNetwork(int netID)
 {
-  return call_method<jboolean>(m_object, "disableNetwork", "(I)Z", netID);
+  return call_method<jboolean>(m_object,
+    "disableNetwork", "(I)Z", netID);
 }
 
 bool CJNIWifiManager::disconnect()
 {
-  return call_method<jboolean>(m_object, "disconnect", "()Z");
+  return call_method<jboolean>(m_object,
+    "disconnect", "()Z");
 }
 
 bool CJNIWifiManager::reconnect()
 {
-  return call_method<jboolean>(m_object, "reconnect", "()Z");
+  return call_method<jboolean>(m_object,
+    "reconnect", "()Z");
 }
 
 bool CJNIWifiManager::reassociate()
 {
-  return call_method<jboolean>(m_object, "rassociate", "()Z");
+  return call_method<jboolean>(m_object,
+    "rassociate", "()Z");
 }
 
 bool CJNIWifiManager::pingSupplicant()
 {
-  return call_method<jboolean>(m_object, "pingSupplicant", "()Z");
+  return call_method<jboolean>(m_object,
+    "pingSupplicant", "()Z");
 }
 
 bool CJNIWifiManager::startScan()
 {
-  return call_method<jboolean>(m_object, "startScan", "()Z");
+  return call_method<jboolean>(m_object,
+    "startScan", "()Z");
 }
 
 CJNIWifiInfo CJNIWifiManager::getConnectionInfo()
 {
-  return (CJNIWifiInfo)call_method<jhobject>(m_object, "getConnectionInfo", "()Landroid/net/wifi/WifiInfo;");
+  return call_method<jhobject>(m_object,
+    "getConnectionInfo", "()Landroid/net/wifi/WifiInfo;");
 }
 
 
 bool CJNIWifiManager::saveConfiguration()
 {
-  return call_method<jboolean>(m_object, "saveConfiguration", "()Z");
+  return call_method<jboolean>(m_object,
+    "saveConfiguration", "()Z");
 }
 
 CJNIDhcpInfo CJNIWifiManager::getDhcpInfo()
 {
-  return call_method<jhobject>(m_object, "getDhcpInfo", "()Landroid/net/DhcpInfo;");
+  return call_method<jhobject>(m_object,
+    "getDhcpInfo", "()Landroid/net/DhcpInfo;");
 }
 
 bool CJNIWifiManager::setWifiEnabled(bool enabled)
 {
-  return call_method<jboolean>(m_object, "setWifiEnabled", "(Z)Z", enabled);
+  return call_method<jboolean>(m_object,
+    "setWifiEnabled", "(Z)Z", enabled);
 }
 
 int CJNIWifiManager::getWifiState()
 {
-  return call_method<jint>(m_object, "getWifiState", "()I");
+  return call_method<jint>(m_object,
+    "getWifiState", "()I");
 }
 
 bool CJNIWifiManager::isWifiEnabled()
 {
-  return call_method<jboolean>(m_object, "isWifiEnabled", "()Z");
+  return call_method<jboolean>(m_object,
+    "isWifiEnabled", "()Z");
 }
 
 int CJNIWifiManager::calculateSignalLevel(int rssi, int numLevels)
 {
-  return call_static_method<jint>("android/net/wifi/WifiManager", "calculateSignalLevel", "(II)I", rssi, numLevels);
+  return call_static_method<jint>("android/net/wifi/WifiManager",
+    "calculateSignalLevel", "(II)I", rssi, numLevels);
 }
 
 int CJNIWifiManager::compareSignalLevel(int rssiA, int rssiB)
 {
-  return call_static_method<jint>("android/net/wifi/WifiManager", "compareSignalLevel", "(II)I", rssiA, rssiB);
+  return call_static_method<jint>("android/net/wifi/WifiManager",
+    "compareSignalLevel", "(II)I", rssiA, rssiB);
 }
 
 CJNIWifiManagerMulticastLock CJNIWifiManager::createMulticastLock(const std::string &tag)
index e24f092..0be4c73 100644 (file)
  *  <http://www.gnu.org/licenses/>.
  *
  */
+
 #include "JNIBase.h"
 #include "List.h"
+
 class CJNIDhcpInfo;
 class CJNIWifiInfo;
 class CJNIScanResult;
 class CJNIWifiConfiguration;
 class CJNIWifiManagerMulticastLock;
+
 class CJNIWifiManager : public CJNIBase
 {
 friend class CJNIContext;
 public:
   CJNIWifiManager(const jni::jhobject &object) : CJNIBase(object){};
+
   CJNIList<CJNIWifiConfiguration> getConfiguredNetworks();
   bool removeNetwork(int);
   bool enableNetwork(int, bool);
@@ -44,11 +48,12 @@ public:
   bool saveConfiguration();
   CJNIDhcpInfo getDhcpInfo();
   bool setWifiEnabled(bool);
-  int getWifiState();
+  int  getWifiState();
   bool isWifiEnabled();
   static int calculateSignalLevel(int, int);
   static int compareSignalLevel(int, int);
   CJNIWifiManagerMulticastLock createMulticastLock(const std::string &tag);
+
 private:
   CJNIWifiManager();
 };
index df1df1e..861fbca 100644 (file)
 #define DBG(fmt, ...)
 #include <string>
 #include "jutils/jutils-details.hpp"
+
 namespace jni
 {
+
 namespace details
 {
+
 std::string jcast_helper<std::string, jstring>::cast(jstring const &v)
 {
     JNIEnv *env = xbmc_jnienv();
index 6fbb3b5..f9e4821 100644 (file)
@@ -67,7 +67,7 @@ bool CEncoderFFmpeg::Init(const char* strFile, int iInChannels, int iInRate, int
 
   AVCodec *codec;
   codec = m_dllAvCodec.avcodec_find_encoder(
-    strcmp(fmt->name, "ogg") == 0 ? CODEC_ID_VORBIS : fmt->audio_codec
+    strcmp(fmt->name, "ogg") == 0 ? AV_CODEC_ID_VORBIS : fmt->audio_codec
   );
 
   if (!codec)
index 8f432a5..99d9a47 100644 (file)
@@ -116,7 +116,7 @@ bool CAEEncoderFFmpeg::Initialize(AEAudioFormat &format)
   if (dts && (!ac3 || g_advancedSettings.m_audioTranscodeTo.Equals("dts")))
   {
     m_CodecName = "DTS";
-    m_CodecID   = CODEC_ID_DTS;
+    m_CodecID   = AV_CODEC_ID_DTS;
     m_PackFunc  = &CAEPackIEC61937::PackDTS_1024;
     m_BitRate   = DTS_ENCODE_BITRATE;
     codec = m_dllAvCodec.avcodec_find_encoder(m_CodecID);
@@ -127,7 +127,7 @@ bool CAEEncoderFFmpeg::Initialize(AEAudioFormat &format)
   if (!codec && ac3)
   {
     m_CodecName = "AC3";
-    m_CodecID   = CODEC_ID_AC3;
+    m_CodecID   = AV_CODEC_ID_AC3;
     m_PackFunc  = &CAEPackIEC61937::PackAC3;
     m_BitRate   = AC3_ENCODE_BITRATE;
     codec = m_dllAvCodec.avcodec_find_encoder(m_CodecID);
@@ -252,7 +252,7 @@ unsigned int CAEEncoderFFmpeg::GetBitRate()
   return m_BitRate;
 }
 
-CodecID CAEEncoderFFmpeg::GetCodecID()
+AVCodecID CAEEncoderFFmpeg::GetCodecID()
 {
   return m_CodecID;
 }
index 48667d3..d422ab6 100644 (file)
@@ -40,7 +40,7 @@ public:
   virtual void Reset();
 
   virtual unsigned int GetBitRate    ();
-  virtual CodecID      GetCodecID    ();
+  virtual AVCodecID    GetCodecID    ();
   virtual unsigned int GetFrames     ();
 
   virtual int Encode (float *data, unsigned int frames);
@@ -53,7 +53,7 @@ private:
   DllSwResample m_dllSwResample;
 
   std::string                m_CodecName;
-  CodecID                   m_CodecID;
+  AVCodecID                  m_CodecID;
   unsigned int              m_BitRate;
   CAEPackIEC61937::PackFunc m_PackFunc;
 
index 055f28b..e304908 100644 (file)
@@ -64,10 +64,10 @@ public:
   virtual unsigned int GetBitRate() = 0;
 
   /**
-   * Returns the CodecID of the encoder
+   * Returns the AVCodecID of the encoder
    * @return the ffmpeg codec id
    */
-  virtual CodecID GetCodecID() = 0;
+  virtual AVCodecID GetCodecID() = 0;
 
   /**
    * Return the number of frames needed to encode
index 8467f3e..5acbe5e 100644 (file)
@@ -408,16 +408,16 @@ void CAMLSubTitleThread::Process(void)
 
             /* TODO: handle other subtitle codec types
             // subtitle codecs
-            CODEC_ID_DVD_SUBTITLE= 0x17000,
-            CODEC_ID_DVB_SUBTITLE,
-            CODEC_ID_TEXT,  ///< raw UTF-8 text
-            CODEC_ID_XSUB,
-            CODEC_ID_SSA,
-            CODEC_ID_MOV_TEXT,
-            CODEC_ID_HDMV_PGS_SUBTITLE,
-            CODEC_ID_DVB_TELETEXT,
-            CODEC_ID_SRT,
-            CODEC_ID_MICRODVD,
+            AV_CODEC_ID_DVD_SUBTITLE= 0x17000,
+            AV_CODEC_ID_DVB_SUBTITLE,
+            AV_CODEC_ID_TEXT,  ///< raw UTF-8 text
+            AV_CODEC_ID_XSUB,
+            AV_CODEC_ID_SSA,
+            AV_CODEC_ID_MOV_TEXT,
+            AV_CODEC_ID_HDMV_PGS_SUBTITLE,
+            AV_CODEC_ID_DVB_TELETEXT,
+            AV_CODEC_ID_SRT,
+            AV_CODEC_ID_MICRODVD,
             */
             switch(sub_type)
             {
@@ -426,12 +426,12 @@ void CAMLSubTitleThread::Process(void)
                   "sub_type(0x%x), size(%d), bgntime(%lld), endtime(%lld), string(%s)",
                   sub_type, sub_size-20, subtitle->bgntime, subtitle->endtime, &sub_buffer[20]);
                 break;
-              case CODEC_ID_TEXT:
+              case AV_CODEC_ID_TEXT:
                 subtitle->bgntime = sub_pts/ 90;
                 subtitle->endtime = subtitle->bgntime + 4000;
                 subtitle->string  = &sub_buffer[20];
                 break;
-              case CODEC_ID_SSA:
+              case AV_CODEC_ID_SSA:
                 if (strncmp((const char*)&sub_buffer[20], "Dialogue:", 9) == 0)
                 {
                   int  vars_found, hour1, min1, sec1, hunsec1, hour2, min2, sec2, hunsec2, nothing;
index 6027a41..3d77f0a 100644 (file)
@@ -116,7 +116,7 @@ CDVDAudio::~CDVDAudio()
   free(m_pBuffer);
 }
 
-bool CDVDAudio::Create(const DVDAudioFrame &audioframe, CodecID codec, bool needresampler)
+bool CDVDAudio::Create(const DVDAudioFrame &audioframe, AVCodecID codec, bool needresampler)
 {
   CLog::Log(LOGNOTICE,
     "Creating audio stream (codec id: %i, channels: %i, sample rate: %i, %s)",
index 0963d34..666d6c6 100644 (file)
@@ -76,7 +76,7 @@ public:
   float GetCurrentAttenuation();
   void Pause();
   void Resume();
-  bool Create(const DVDAudioFrame &audioframe, CodecID codec, bool needresampler);
+  bool Create(const DVDAudioFrame &audioframe, AVCodecID codec, bool needresampler);
   bool IsValidFormat(const DVDAudioFrame &audioframe);
   void Destroy();
   unsigned int AddPackets(const DVDAudioFrame &audioframe);
index bee341a..93a376b 100644 (file)
@@ -34,8 +34,8 @@ CDVDAudioCodecFFmpeg::CDVDAudioCodecFFmpeg() : CDVDAudioCodec()
 {
   m_iBufferSize1 = 0;
   m_iBufferSize2 = 0;
-  m_pBuffer2     = (uint8_t*)_aligned_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE, 16);
-  memset(m_pBuffer2, 0, AVCODEC_MAX_AUDIO_FRAME_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
+  m_iBufferTotalSize2 = 0;
+  m_pBuffer2     = NULL;
 
   m_iBuffered = 0;
   m_pCodecContext = NULL;
@@ -54,7 +54,6 @@ CDVDAudioCodecFFmpeg::CDVDAudioCodecFFmpeg() : CDVDAudioCodec()
 
 CDVDAudioCodecFFmpeg::~CDVDAudioCodecFFmpeg()
 {
-  _aligned_free(m_pBuffer2);
   Dispose();
 }
 
@@ -130,6 +129,9 @@ void CDVDAudioCodecFFmpeg::Dispose()
   if (m_pConvert)
     m_dllSwResample.swr_free(&m_pConvert);
 
+  if (m_pBuffer2)
+    m_dllAvUtil.av_freep(&m_pBuffer2);
+
   if (m_pCodecContext)
   {
     if (m_bOpenedCodec) m_dllAvCodec.avcodec_close(m_pCodecContext);
@@ -144,6 +146,7 @@ void CDVDAudioCodecFFmpeg::Dispose()
 
   m_iBufferSize1 = 0;
   m_iBufferSize2 = 0;
+  m_iBufferTotalSize2 = 0;
   m_iBuffered = 0;
 }
 
@@ -152,7 +155,6 @@ int CDVDAudioCodecFFmpeg::Decode(uint8_t* pData, int iSize)
   int iBytesUsed, got_frame;
   if (!m_pCodecContext) return -1;
 
-  m_iBufferSize1 = AVCODEC_MAX_AUDIO_FRAME_SIZE ;
   m_iBufferSize2 = 0;
 
   AVPacket avpkt;
@@ -212,8 +214,25 @@ void CDVDAudioCodecFFmpeg::ConvertToFloat()
       }
     }
 
-    int len = m_iBufferSize1 / m_dllAvUtil.av_get_bytes_per_sample(m_pCodecContext->sample_fmt);
-    if(m_dllSwResample.swr_convert(m_pConvert, &m_pBuffer2, len, (const uint8_t**)m_pFrame1->data, m_pFrame1->nb_samples) < 0)
+    int needed_buf_size = m_dllAvUtil.av_samples_get_buffer_size(NULL, m_pCodecContext->channels, m_pFrame1->nb_samples, AV_SAMPLE_FMT_FLT, 0);
+    if(m_iBufferTotalSize2 < needed_buf_size)
+    {
+        m_pBuffer2 = (uint8_t*)m_dllAvUtil.av_realloc(m_pBuffer2, needed_buf_size);
+        if(!m_pBuffer2)
+        {
+            CLog::Log(LOGERROR, "CDVDAudioCodecFFmpeg::Decode - Unable to allocate a %i bytes buffer for resampling", needed_buf_size);
+            m_iBufferSize1 = 0;
+            m_iBufferSize2 = 0;
+            m_iBufferTotalSize2 = 0;
+            return;
+        }
+        m_iBufferTotalSize2 = needed_buf_size;
+    }
+
+    int outsamples;
+    outsamples = m_dllSwResample.swr_convert(m_pConvert, &m_pBuffer2, m_iBufferTotalSize2, (const uint8_t**)m_pFrame1->extended_data, m_pFrame1->nb_samples);
+
+    if(outsamples < 0)
     {
       CLog::Log(LOGERROR, "CDVDAudioCodecFFmpeg::Decode - Unable to convert %d to AV_SAMPLE_FMT_FLT", (int)m_pCodecContext->sample_fmt);
       m_iBufferSize1 = 0;
@@ -221,8 +240,13 @@ void CDVDAudioCodecFFmpeg::ConvertToFloat()
       return;
     }
 
+    if(outsamples < m_pFrame1->nb_samples)
+    {
+      CLog::Log(LOGWARNING, "CDVDAudioCodecFFmpeg::Decode - Resampler produced less samples than what it was given");
+    }
+
     m_iBufferSize1 = 0;
-    m_iBufferSize2 = len * m_dllAvUtil.av_get_bytes_per_sample(AV_SAMPLE_FMT_FLT);
+    m_iBufferSize2 = m_dllAvUtil.av_samples_get_buffer_size(NULL, m_pCodecContext->channels, m_pFrame1->nb_samples, AV_SAMPLE_FMT_FLT, 0);
   }
 }
 
index ee2bc06..fea78ac 100644 (file)
@@ -57,6 +57,7 @@ protected:
   int      m_iBufferSize1;
   uint8_t*    m_pBuffer2;
   int      m_iBufferSize2;
+  int      m_iBufferTotalSize2;
 
   bool m_bOpenedCodec;
   int m_iBuffered;
index d3a3f21..2142335 100644 (file)
@@ -23,7 +23,7 @@
 
 CDVDAudioCodecLPcm::CDVDAudioCodecLPcm() : CDVDAudioCodecPcm()
 {
-  m_codecID = CODEC_ID_NONE;
+  m_codecID = AV_CODEC_ID_NONE;
   m_bufferSize = LPCM_BUFFER_SIZE;
   memset(m_buffer, 0, sizeof(m_buffer));
 }
@@ -33,11 +33,11 @@ bool CDVDAudioCodecLPcm::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
   m_codecID = hints.codec;
 
   CDVDStreamInfo hints2(hints, true);
-  hints2.codec = CODEC_ID_NONE;
+  hints2.codec = AV_CODEC_ID_NONE;
 #if 0
-  if (hints.codecID = CODEC_ID_LPCM_S24BE) hints2.codec = CODEC_ID_PCM_S24BE;
+  if (hints.codecID = AV_CODEC_ID_LPCM_S24BE) hints2.codec = AV_CODEC_ID_PCM_S24BE;
 #endif
-  if (hints2.codec != CODEC_ID_NONE)
+  if (hints2.codec != AV_CODEC_ID_NONE)
     return CDVDAudioCodecPcm::Open(hints2, options);
 
   return false;
@@ -54,7 +54,7 @@ int CDVDAudioCodecLPcm::Decode(uint8_t* pData, int iSize)
   {
     int iDecoded = 0;
 #if 0
-    if (m_codecID == CODEC_ID_LPCM_S24BE)
+    if (m_codecID == AV_CODEC_ID_LPCM_S24BE)
 #endif
     {
       for (iDecoded = 0; iDecoded <= (iSize - 12); iDecoded += 12)
index a865b79..5ee1557 100644 (file)
@@ -40,5 +40,5 @@ protected:
   int m_bufferSize;
   uint8_t m_buffer[LPCM_BUFFER_SIZE];
 
-  CodecID m_codecID;
+  AVCodecID m_codecID;
 };
index 672d302..62f00e5 100644 (file)
@@ -67,12 +67,12 @@ bool CDVDAudioCodecPassthrough::Open(CDVDStreamInfo &hints, CDVDCodecOptions &op
   m_bufferSize = 0;
 
   if (
-      (hints.codec == CODEC_ID_AC3 && bSupportsAC3Out) ||
-      (hints.codec == CODEC_ID_DTS && bSupportsDTSOut) ||
+      (hints.codec == AV_CODEC_ID_AC3 && bSupportsAC3Out) ||
+      (hints.codec == AV_CODEC_ID_DTS && bSupportsDTSOut) ||
       (audioMode == AUDIO_HDMI &&
         (
-          (hints.codec == CODEC_ID_EAC3   && bSupportsAC3Out   ) ||
-          (hints.codec == CODEC_ID_TRUEHD && bSupportsTrueHDOut)
+          (hints.codec == AV_CODEC_ID_EAC3   && bSupportsAC3Out   ) ||
+          (hints.codec == AV_CODEC_ID_TRUEHD && bSupportsTrueHDOut)
         )
       )
   )
index 928cab8..0f3f424 100644 (file)
@@ -145,7 +145,7 @@ bool CDVDAudioCodecPassthroughFFmpeg::SetupMuxer(CDVDStreamInfo &hints, CStdStri
 
   /* set the stream's parameters */
   m_SampleRate = hints.samplerate;
-  if(!m_SampleRate && hints.codec == CODEC_ID_AC3)
+  if(!m_SampleRate && hints.codec == AV_CODEC_ID_AC3)
     m_SampleRate = 48000;
 
   AVCodecContext *codec = muxer.m_pStream->codec;
@@ -283,9 +283,9 @@ bool CDVDAudioCodecPassthroughFFmpeg::SupportsFormat(CDVDStreamInfo &hints)
 {
   m_pSyncFrame = NULL;
 
-       if (m_bSupportsAC3Out && hints.codec == CODEC_ID_AC3) m_pSyncFrame = &CDVDAudioCodecPassthroughFFmpeg::SyncAC3;
-  else if (m_bSupportsDTSOut && hints.codec == CODEC_ID_DTS) m_pSyncFrame = &CDVDAudioCodecPassthroughFFmpeg::SyncDTS;
-  else if (m_bSupportsAACOut && hints.codec == CODEC_ID_AAC) m_pSyncFrame = &CDVDAudioCodecPassthroughFFmpeg::SyncAAC;
+       if (m_bSupportsAC3Out && hints.codec == AV_CODEC_ID_AC3) m_pSyncFrame = &CDVDAudioCodecPassthroughFFmpeg::SyncAC3;
+  else if (m_bSupportsDTSOut && hints.codec == AV_CODEC_ID_DTS) m_pSyncFrame = &CDVDAudioCodecPassthroughFFmpeg::SyncDTS;
+  else if (m_bSupportsAACOut && hints.codec == AV_CODEC_ID_AAC) m_pSyncFrame = &CDVDAudioCodecPassthroughFFmpeg::SyncAAC;
   else return false;
 
   return true;
@@ -334,7 +334,7 @@ bool CDVDAudioCodecPassthroughFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptio
   else
   {
     /* aac needs to be wrapped into ADTS frames */
-    if (hints.codec == CODEC_ID_AAC)
+    if (hints.codec == AV_CODEC_ID_AAC)
       if (!SetupMuxer(hints, "adts", m_ADTS))
       {
         CLog::Log(LOGERROR, "CDVDAudioCodecPassthroughFFmpeg::Open - Unable to setup ADTS muxer");
@@ -487,8 +487,8 @@ enum AEDataFormat CDVDAudioCodecPassthroughFFmpeg::GetDataFormat()
 {
   switch(m_codec)
   {
-    case CODEC_ID_AC3:      return AE_FMT_AC3;
-    case CODEC_ID_DTS:      return AE_FMT_DTS;
+    case AV_CODEC_ID_AC3:      return AE_FMT_AC3;
+    case AV_CODEC_ID_DTS:      return AE_FMT_DTS;
     default:
       return AE_FMT_INVALID; //Unknown stream type
   }
index 4113b81..62883b2 100644 (file)
@@ -94,7 +94,7 @@ private:
   unsigned int m_Needed;
   bool         m_LostSync;
   int          m_SampleRate;
-  CodecID      m_codec;
+  AVCodecID    m_codec;
 
   unsigned int (CDVDAudioCodecPassthroughFFmpeg::*m_pSyncFrame)(uint8_t* pData, unsigned int iSize, unsigned int *fSize);
   unsigned int SyncAC3(uint8_t* pData, unsigned int iSize, unsigned int *fSize);
index 61671f6..8da2b7f 100644 (file)
@@ -113,7 +113,7 @@ CDVDAudioCodecPcm::CDVDAudioCodecPcm() : CDVDAudioCodec()
   m_iSourceSampleRate = 0;
   m_iSourceBitrate = 0;
   m_decodedDataSize = 0;
-  m_codecID = CODEC_ID_NONE;
+  m_codecID = AV_CODEC_ID_NONE;
   m_iOutputChannels = 0;
 
   memset(m_decodedData, 0, sizeof(m_decodedData));
@@ -136,12 +136,12 @@ bool CDVDAudioCodecPcm::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
 
   switch (m_codecID)
   {
-    case CODEC_ID_PCM_ALAW:
+    case AV_CODEC_ID_PCM_ALAW:
     {
       for (int i = 0; i < 256; i++) table[i] = alaw2linear(i);
       break;
     }
-    case CODEC_ID_PCM_MULAW:
+    case AV_CODEC_ID_PCM_MULAW:
     {
       for (int i = 0; i < 256; i++) table[i] = ulaw2linear(i);
       break;
@@ -177,31 +177,31 @@ int CDVDAudioCodecPcm::Decode(uint8_t* pData, int iSize)
 
     switch (m_codecID)
     {
-    case CODEC_ID_PCM_S32LE:
+    case AV_CODEC_ID_PCM_S32LE:
         decode_to16(4, 1, 0, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_S32BE:
+    case AV_CODEC_ID_PCM_S32BE:
         decode_to16(4, 0, 0, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_U32LE:
+    case AV_CODEC_ID_PCM_U32LE:
         decode_to16(4, 1, 1, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_U32BE:
+    case AV_CODEC_ID_PCM_U32BE:
         decode_to16(4, 0, 1, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_S24LE:
+    case AV_CODEC_ID_PCM_S24LE:
         decode_to16(3, 1, 0, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_S24BE:
+    case AV_CODEC_ID_PCM_S24BE:
         decode_to16(3, 0, 0, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_U24LE:
+    case AV_CODEC_ID_PCM_U24LE:
         decode_to16(3, 1, 1, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_U24BE:
+    case AV_CODEC_ID_PCM_U24BE:
         decode_to16(3, 0, 1, &src, &samples, buf_size);
         break;
-    case CODEC_ID_PCM_S24DAUD:
+    case AV_CODEC_ID_PCM_S24DAUD:
         n = buf_size / 3;
         for(;n>0;n--) {
           uint32_t v = src[0] << 16 | src[1] << 8 | src[2];
@@ -211,50 +211,50 @@ int CDVDAudioCodecPcm::Decode(uint8_t* pData, int iSize)
           src += 3;
         }
         break;
-    case CODEC_ID_PCM_S16LE:
+    case AV_CODEC_ID_PCM_S16LE:
         n = buf_size >> 1;
         for(;n>0;n--) {
             *samples++ = src[0] | (src[1] << 8);
             src += 2;
         }
         break;
-    case CODEC_ID_PCM_S16BE:
+    case AV_CODEC_ID_PCM_S16BE:
         n = buf_size >> 1;
         for(;n>0;n--) {
             *samples++ = (src[0] << 8) | src[1];
             src += 2;
         }
         break;
-    case CODEC_ID_PCM_U16LE:
+    case AV_CODEC_ID_PCM_U16LE:
         n = buf_size >> 1;
         for(;n>0;n--) {
             *samples++ = (src[0] | (src[1] << 8)) - 0x8000;
             src += 2;
         }
         break;
-    case CODEC_ID_PCM_U16BE:
+    case AV_CODEC_ID_PCM_U16BE:
         n = buf_size >> 1;
         for(;n>0;n--) {
             *samples++ = ((src[0] << 8) | src[1]) - 0x8000;
             src += 2;
         }
         break;
-    case CODEC_ID_PCM_S8:
+    case AV_CODEC_ID_PCM_S8:
         n = buf_size;
         for(;n>0;n--) {
             *samples++ = src[0] << 8;
             src++;
         }
         break;
-    case CODEC_ID_PCM_U8:
+    case AV_CODEC_ID_PCM_U8:
         n = buf_size;
         for(;n>0;n--) {
             *samples++ = ((int)src[0] - 128) << 8;
             src++;
         }
         break;
-    case CODEC_ID_PCM_ALAW:
-    case CODEC_ID_PCM_MULAW:
+    case AV_CODEC_ID_PCM_ALAW:
+    case AV_CODEC_ID_PCM_MULAW:
         n = buf_size;
         for(;n>0;n--) {
             *samples++ = table[src[0]];
@@ -281,7 +281,7 @@ void CDVDAudioCodecPcm::SetDefault()
   m_iSourceSampleRate = 0;
   m_iSourceBitrate = 0;
   m_decodedDataSize = 0;
-  m_codecID = CODEC_ID_NONE;
+  m_codecID = AV_CODEC_ID_NONE;
 }
 
 void CDVDAudioCodecPcm::Reset()
index 97c6fe2..fdab055 100644 (file)
@@ -44,7 +44,7 @@ protected:
   short m_decodedData[131072]; // could be a bit to big
   int m_decodedDataSize;
 
-  CodecID m_codecID;
+  AVCodecID m_codecID;
   int m_iSourceSampleRate;
   int m_iSourceChannels;
   int m_iSourceBitrate;
index 9ad29f9..1477264 100644 (file)
@@ -181,7 +181,7 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne
   CLog::Log(LOGDEBUG, "CDVDFactoryCodec: compiled in hardware support: %s", hwSupport.c_str());
 #if !defined(HAS_LIBAMCODEC)
   // dvd's have weird still-frames in it, which is not fully supported in ffmpeg
-  if(hint.stills && (hint.codec == CODEC_ID_MPEG2VIDEO || hint.codec == CODEC_ID_MPEG1VIDEO))
+  if(hint.stills && (hint.codec == AV_CODEC_ID_MPEG2VIDEO || hint.codec == AV_CODEC_ID_MPEG1VIDEO))
   {
     if( (pCodec = OpenCodec(new CDVDVideoCodecLibMpeg2(), hint, options)) ) return pCodec;
   }
@@ -190,7 +190,7 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne
 #if defined(TARGET_DARWIN_OSX)
   if (!hint.software && CSettings::Get().GetBool("videoplayer.usevda"))
   {
-    if (hint.codec == CODEC_ID_H264 && !hint.ptsinvalid)
+    if (hint.codec == AV_CODEC_ID_H264 && !hint.ptsinvalid)
     {
       if ( (pCodec = OpenCodec(new CDVDVideoCodecVDA(), hint, options)) ) return pCodec;
     }
@@ -204,8 +204,8 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne
     {
       switch(hint.codec)
       {
-        case CODEC_ID_H264:
-          if (hint.codec == CODEC_ID_H264 && hint.ptsinvalid)
+        case AV_CODEC_ID_H264:
+          if (hint.codec == AV_CODEC_ID_H264 && hint.ptsinvalid)
             break;
           if ( (pCodec = OpenCodec(new CDVDVideoCodecVideoToolBox(), hint, options)) ) return pCodec;
         break;
@@ -223,13 +223,13 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne
     {
       switch(hint.codec)
       {
-        case CODEC_ID_VC1:
-        case CODEC_ID_WMV3:
-        case CODEC_ID_H264:
-        case CODEC_ID_MPEG2VIDEO:
-          if (hint.codec == CODEC_ID_H264 && hint.ptsinvalid)
+        case AV_CODEC_ID_VC1:
+        case AV_CODEC_ID_WMV3:
+        case AV_CODEC_ID_H264:
+        case AV_CODEC_ID_MPEG2VIDEO:
+          if (hint.codec == AV_CODEC_ID_H264 && hint.ptsinvalid)
             break;
-          if (hint.codec == CODEC_ID_MPEG2VIDEO && hint.width <= 720)
+          if (hint.codec == AV_CODEC_ID_MPEG2VIDEO && hint.width <= 720)
             break;
           if ( (pCodec = OpenCodec(new CDVDVideoCodecCrystalHD(), hint, options)) ) return pCodec;
         break;
@@ -251,7 +251,7 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne
 #if defined(HAVE_LIBOPENMAX)
   if (CSettings::Get().GetBool("videoplayer.useomx") && !hint.software )
   {
-      if (hint.codec == CODEC_ID_H264 || hint.codec == CODEC_ID_MPEG2VIDEO || hint.codec == CODEC_ID_VC1)
+      if (hint.codec == AV_CODEC_ID_H264 || hint.codec == AV_CODEC_ID_MPEG2VIDEO || hint.codec == AV_CODEC_ID_VC1)
     {
       if ( (pCodec = OpenCodec(new CDVDVideoCodecOpenMax(), hint, options)) ) return pCodec;
     }
@@ -286,8 +286,8 @@ CDVDAudioCodec* CDVDFactoryCodec::CreateAudioCodec( CDVDStreamInfo &hint, bool p
 #if defined(TARGET_DARWIN_OSX) || defined(TARGET_DARWIN_IOS)
     switch(hint.codec)
     {
-      case CODEC_ID_AC3:
-      case CODEC_ID_DTS:
+      case AV_CODEC_ID_AC3:
+      case AV_CODEC_ID_DTS:
         pCodec = OpenCodec( new CDVDAudioCodecPassthroughFFmpeg(), hint, options );
         if( pCodec ) return pCodec;
         break;
@@ -301,39 +301,39 @@ CDVDAudioCodec* CDVDFactoryCodec::CreateAudioCodec( CDVDStreamInfo &hint, bool p
 
   switch (hint.codec)
   {
-  case CODEC_ID_MP2:
-  case CODEC_ID_MP3:
+  case AV_CODEC_ID_MP2:
+  case AV_CODEC_ID_MP3:
     {
       pCodec = OpenCodec( new CDVDAudioCodecLibMad(), hint, options );
       if( pCodec ) return pCodec;
       break;
     }
-  case CODEC_ID_PCM_S32LE:
-  case CODEC_ID_PCM_S32BE:
-  case CODEC_ID_PCM_U32LE:
-  case CODEC_ID_PCM_U32BE:
-  case CODEC_ID_PCM_S24LE:
-  case CODEC_ID_PCM_S24BE:
-  case CODEC_ID_PCM_U24LE:
-  case CODEC_ID_PCM_U24BE:
-  case CODEC_ID_PCM_S24DAUD:
-  case CODEC_ID_PCM_S16LE:
-  case CODEC_ID_PCM_S16BE:
-  case CODEC_ID_PCM_U16LE:
-  case CODEC_ID_PCM_U16BE:
-  case CODEC_ID_PCM_S8:
-  case CODEC_ID_PCM_U8:
-  case CODEC_ID_PCM_ALAW:
-  case CODEC_ID_PCM_MULAW:
+  case AV_CODEC_ID_PCM_S32LE:
+  case AV_CODEC_ID_PCM_S32BE:
+  case AV_CODEC_ID_PCM_U32LE:
+  case AV_CODEC_ID_PCM_U32BE:
+  case AV_CODEC_ID_PCM_S24LE:
+  case AV_CODEC_ID_PCM_S24BE:
+  case AV_CODEC_ID_PCM_U24LE:
+  case AV_CODEC_ID_PCM_U24BE:
+  case AV_CODEC_ID_PCM_S24DAUD:
+  case AV_CODEC_ID_PCM_S16LE:
+  case AV_CODEC_ID_PCM_S16BE:
+  case AV_CODEC_ID_PCM_U16LE:
+  case AV_CODEC_ID_PCM_U16BE:
+  case AV_CODEC_ID_PCM_S8:
+  case AV_CODEC_ID_PCM_U8:
+  case AV_CODEC_ID_PCM_ALAW:
+  case AV_CODEC_ID_PCM_MULAW:
     {
       pCodec = OpenCodec( new CDVDAudioCodecPcm(), hint, options );
       if( pCodec ) return pCodec;
       break;
     }
 #if 0
-  //case CODEC_ID_LPCM_S16BE:
-  //case CODEC_ID_LPCM_S20BE:
-  case CODEC_ID_LPCM_S24BE:
+  //case AV_CODEC_ID_LPCM_S16BE:
+  //case AV_CODEC_ID_LPCM_S20BE:
+  case AV_CODEC_ID_LPCM_S24BE:
     {
       pCodec = OpenCodec( new CDVDAudioCodecLPcm(), hint, options );
       if( pCodec ) return pCodec;
@@ -360,7 +360,7 @@ CDVDOverlayCodec* CDVDFactoryCodec::CreateOverlayCodec( CDVDStreamInfo &hint )
 
   switch (hint.codec)
   {
-    case CODEC_ID_TEXT:
+    case AV_CODEC_ID_TEXT:
 #if defined(LIBAVCODEC_FROM_FFMPEG) && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,53,100)
     // API changed in:
     // ffmpeg: commit 2626cc4580bfd560c6983338d77b2c11c16af94f (11 Aug 2012)
@@ -371,7 +371,7 @@ CDVDOverlayCodec* CDVDFactoryCodec::CreateOverlayCodec( CDVDStreamInfo &hint )
       if( pCodec ) return pCodec;
       break;
 
-    case CODEC_ID_SSA:
+    case AV_CODEC_ID_SSA:
       pCodec = OpenCodec(new CDVDOverlayCodecSSA(), hint, options);
       if( pCodec ) return pCodec;
 
@@ -379,7 +379,7 @@ CDVDOverlayCodec* CDVDFactoryCodec::CreateOverlayCodec( CDVDStreamInfo &hint )
       if( pCodec ) return pCodec;
       break;
 
-    case CODEC_ID_MOV_TEXT:
+    case AV_CODEC_ID_MOV_TEXT:
       pCodec = OpenCodec(new CDVDOverlayCodecTX3G(), hint, options);
       if( pCodec ) return pCodec;
       break;
index 3bf7d7c..5fd3e17 100644 (file)
@@ -181,7 +181,7 @@ int CDVDOverlayCodecFFmpeg::Decode(DemuxPacket *pPacket)
 
   double pts_offset = 0.0;
  
-  if (m_pCodecContext->codec_id == CODEC_ID_HDMV_PGS_SUBTITLE && m_Subtitle.format == 0) 
+  if (m_pCodecContext->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE && m_Subtitle.format == 0)
   {
     // for pgs subtitles the packet pts of the end_segments are wrong
     // instead use the subtitle pts to calc the offset here
index 6cdd328..92ca762 100644 (file)
@@ -44,7 +44,7 @@ CDVDOverlayCodecSSA::~CDVDOverlayCodecSSA()
 
 bool CDVDOverlayCodecSSA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
 {
-  if(hints.codec != CODEC_ID_SSA)
+  if(hints.codec != AV_CODEC_ID_SSA)
     return false;
 
   Dispose();
index a3f542b..ca0cb94 100644 (file)
@@ -75,7 +75,7 @@ CDVDOverlayCodecTX3G::~CDVDOverlayCodecTX3G()
 
 bool CDVDOverlayCodecTX3G::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
 {
-  if (hints.codec == CODEC_ID_MOV_TEXT)
+  if (hints.codec == AV_CODEC_ID_MOV_TEXT)
     return true;
   return false;
 }
index aa6163f..7fb71f1 100644 (file)
@@ -41,8 +41,8 @@ CDVDOverlayCodecText::~CDVDOverlayCodecText()
 
 bool CDVDOverlayCodecText::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
 {
-  m_bIsSSA = (hints.codec == CODEC_ID_SSA);
-  if(hints.codec == CODEC_ID_TEXT || hints.codec == CODEC_ID_SSA)
+  m_bIsSSA = (hints.codec == AV_CODEC_ID_SSA);
+  if(hints.codec == AV_CODEC_ID_TEXT || hints.codec == AV_CODEC_ID_SSA)
     return true;
 #if defined(LIBAVCODEC_FROM_FFMPEG) && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,53,100)
   // API changed in:
index 46b1726..0d8999a 100644 (file)
@@ -282,49 +282,49 @@ static int set_pts_pcrscr(int64_t value)
   return -1;
 }
 
-static vformat_t codecid_to_vformat(enum CodecID id)
+static vformat_t codecid_to_vformat(enum AVCodecID id)
 {
   vformat_t format;
   switch (id)
   {
-    case CODEC_ID_MPEG1VIDEO:
-    case CODEC_ID_MPEG2VIDEO:
-    case CODEC_ID_MPEG2VIDEO_XVMC:
+    case AV_CODEC_ID_MPEG1VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO_XVMC:
       format = VFORMAT_MPEG12;
       break;
-    case CODEC_ID_H263:
-    case CODEC_ID_MPEG4:
-    case CODEC_ID_H263P:
-    case CODEC_ID_H263I:
-    case CODEC_ID_MSMPEG4V2:
-    case CODEC_ID_MSMPEG4V3:
-    case CODEC_ID_FLV1:
+    case AV_CODEC_ID_H263:
+    case AV_CODEC_ID_MPEG4:
+    case AV_CODEC_ID_H263P:
+    case AV_CODEC_ID_H263I:
+    case AV_CODEC_ID_MSMPEG4V2:
+    case AV_CODEC_ID_MSMPEG4V3:
+    case AV_CODEC_ID_FLV1:
       format = VFORMAT_MPEG4;
       break;
-    case CODEC_ID_RV10:
-    case CODEC_ID_RV20:
-    case CODEC_ID_RV30:
-    case CODEC_ID_RV40:
+    case AV_CODEC_ID_RV10:
+    case AV_CODEC_ID_RV20:
+    case AV_CODEC_ID_RV30:
+    case AV_CODEC_ID_RV40:
       format = VFORMAT_REAL;
       break;
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
       format = VFORMAT_H264;
       break;
     /*
-    case CODEC_ID_H264MVC:
+    case AV_CODEC_ID_H264MVC:
       // H264 Multiview Video Coding (3d blurays)
       format = VFORMAT_H264MVC;
       break;
     */
-    case CODEC_ID_MJPEG:
+    case AV_CODEC_ID_MJPEG:
       format = VFORMAT_MJPEG;
       break;
-    case CODEC_ID_VC1:
-    case CODEC_ID_WMV3:
+    case AV_CODEC_ID_VC1:
+    case AV_CODEC_ID_WMV3:
       format = VFORMAT_VC1;
       break;
-    case CODEC_ID_AVS:
-    case CODEC_ID_CAVS:
+    case AV_CODEC_ID_AVS:
+    case AV_CODEC_ID_CAVS:
       format = VFORMAT_AVS;
       break;
 
@@ -381,11 +381,11 @@ static vdec_type_t codec_tag_to_vdec_type(unsigned int codec_tag)
     case CODEC_TAG_RMP4:
     case CODEC_TAG_MPG4:
     case CODEC_TAG_mp4v:
-    case CODEC_ID_MPEG4:
+    case AV_CODEC_ID_MPEG4:
       // mp4
       dec_type = VIDEO_DEC_FORMAT_MPEG4_5;
       break;
-    case CODEC_ID_H263:
+    case AV_CODEC_ID_H263:
     case CODEC_TAG_H263:
     case CODEC_TAG_h263:
     case CODEC_TAG_s263:
@@ -397,21 +397,21 @@ static vdec_type_t codec_tag_to_vdec_type(unsigned int codec_tag)
     case CODEC_TAG_avc1:
     case CODEC_TAG_H264:
     case CODEC_TAG_h264:
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
       // h264
       dec_type = VIDEO_DEC_FORMAT_H264;
       break;
     /*
-    case CODEC_ID_H264MVC:
+    case AV_CODEC_ID_H264MVC:
       dec_type = VIDEO_DEC_FORMAT_H264;
       break;
     */
-    case CODEC_ID_RV30:
+    case AV_CODEC_ID_RV30:
     case CODEC_TAG_RV30:
       // realmedia 3
       dec_type = VIDEO_DEC_FORMAT_REAL_8;
       break;
-    case CODEC_ID_RV40:
+    case AV_CODEC_ID_RV40:
     case CODEC_TAG_RV40:
       // realmedia 4
       dec_type = VIDEO_DEC_FORMAT_REAL_9;
@@ -420,19 +420,19 @@ static vdec_type_t codec_tag_to_vdec_type(unsigned int codec_tag)
       // wmv3
       dec_type = VIDEO_DEC_FORMAT_WMV3;
       break;
-    case CODEC_ID_VC1:
+    case AV_CODEC_ID_VC1:
     case CODEC_TAG_VC_1:
     case CODEC_TAG_WVC1:
     case CODEC_TAG_WMVA:
       // vc1
       dec_type = VIDEO_DEC_FORMAT_WVC1;
       break;
-    case CODEC_ID_VP6F:
+    case AV_CODEC_ID_VP6F:
       // vp6
       dec_type = VIDEO_DEC_FORMAT_SW;
       break;
-    case CODEC_ID_CAVS:
-    case CODEC_ID_AVS:
+    case AV_CODEC_ID_CAVS:
+    case AV_CODEC_ID_AVS:
       // avs
       dec_type = VIDEO_DEC_FORMAT_AVS;
       break;
@@ -1129,9 +1129,9 @@ int pre_header_feeding(am_private_t *para, am_packet_t *pkt)
                 return PLAYER_NOMEM;
             }
         }
-        if (( CODEC_ID_MPEG1VIDEO == para->video_codec_id)
-          || (CODEC_ID_MPEG2VIDEO == para->video_codec_id)
-          || (CODEC_ID_MPEG2VIDEO_XVMC == para->video_codec_id)) {
+        if (( AV_CODEC_ID_MPEG1VIDEO == para->video_codec_id)
+          || (AV_CODEC_ID_MPEG2VIDEO == para->video_codec_id)
+          || (AV_CODEC_ID_MPEG2VIDEO_XVMC == para->video_codec_id)) {
             ret = mpeg_add_header(para, pkt);
             if (ret != PLAYER_SUCCESS) {
                 return ret;
@@ -1531,7 +1531,7 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
 
   // check for SD h264 content incorrectly reported as 60 fsp
   // mp4/avi containers :(
-  if (hints.codec == CODEC_ID_H264 && hints.width <= 720 && am_private->video_rate == 1602)
+  if (hints.codec == AV_CODEC_ID_H264 && hints.width <= 720 && am_private->video_rate == 1602)
   {
     CLog::Log(LOGDEBUG, "CAMLCodec::OpenDecoder video_rate exception");
     am_private->video_rate = 0.5 + (float)UNIT_FREQ * 1001 / 24000;
@@ -1539,7 +1539,7 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
 
   // check for SD h264 content incorrectly reported as some form of 30 fsp
   // mp4/avi containers :(
-  if (hints.codec == CODEC_ID_H264 && hints.width <= 720)
+  if (hints.codec == AV_CODEC_ID_H264 && hints.width <= 720)
   {
     if (am_private->video_rate >= 3200 && am_private->video_rate <= 3210)
     {
@@ -1576,7 +1576,7 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
     am_private->video_codec_type = codec_tag_to_vdec_type(am_private->video_codec_id);
 
   am_private->flv_flag = 0;
-  if (am_private->video_codec_id == CODEC_ID_FLV1)
+  if (am_private->video_codec_id == AV_CODEC_ID_FLV1)
   {
     am_private->video_codec_tag = CODEC_TAG_F263;
     am_private->flv_flag = 1;
index d88541c..454ed65 100644 (file)
@@ -61,12 +61,12 @@ bool CDVDVideoCodecAmlogic::Open(CDVDStreamInfo &hints, CDVDCodecOptions &option
 {
   switch(hints.codec)
   {
-    case CODEC_ID_MJPEG:
+    case AV_CODEC_ID_MJPEG:
       m_pFormatName = "am-mjpeg";
       break;
-    case CODEC_ID_MPEG1VIDEO:
-    case CODEC_ID_MPEG2VIDEO:
-    case CODEC_ID_MPEG2VIDEO_XVMC:
+    case AV_CODEC_ID_MPEG1VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO_XVMC:
       m_mpeg2_sequence_pts = 0;
       m_mpeg2_sequence = new mpeg2_sequence;
       m_mpeg2_sequence->width  = hints.width;
@@ -80,36 +80,36 @@ bool CDVDVideoCodecAmlogic::Open(CDVDStreamInfo &hints, CDVDCodecOptions &option
         m_mpeg2_sequence->rate = 1.0;
       m_pFormatName = "am-mpeg2";
       break;
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
       m_pFormatName = "am-h264";
       break;
-    case CODEC_ID_MPEG4:
-    case CODEC_ID_MSMPEG4V2:
-    case CODEC_ID_MSMPEG4V3:
+    case AV_CODEC_ID_MPEG4:
+    case AV_CODEC_ID_MSMPEG4V2:
+    case AV_CODEC_ID_MSMPEG4V3:
       m_pFormatName = "am-mpeg4";
       break;
-    case CODEC_ID_H263:
-    case CODEC_ID_H263P:
-    case CODEC_ID_H263I:
+    case AV_CODEC_ID_H263:
+    case AV_CODEC_ID_H263P:
+    case AV_CODEC_ID_H263I:
       m_pFormatName = "am-h263";
       break;
-    case CODEC_ID_FLV1:
+    case AV_CODEC_ID_FLV1:
       m_pFormatName = "am-flv1";
       break;
-    case CODEC_ID_RV10:
-    case CODEC_ID_RV20:
-    case CODEC_ID_RV30:
-    case CODEC_ID_RV40:
+    case AV_CODEC_ID_RV10:
+    case AV_CODEC_ID_RV20:
+    case AV_CODEC_ID_RV30:
+    case AV_CODEC_ID_RV40:
       m_pFormatName = "am-rv";
       break;
-    case CODEC_ID_VC1:
+    case AV_CODEC_ID_VC1:
       m_pFormatName = "am-vc1";
       break;
-    case CODEC_ID_WMV3:
+    case AV_CODEC_ID_WMV3:
       m_pFormatName = "am-wmv3";
       break;
-    case CODEC_ID_AVS:
-    case CODEC_ID_CAVS:
+    case AV_CODEC_ID_AVS:
+    case AV_CODEC_ID_CAVS:
       m_pFormatName = "am-avs";
       break;
     default:
index a1ec3ea..f7656b0 100644 (file)
@@ -55,11 +55,11 @@ bool CDVDVideoCodecCrystalHD::Open(CDVDStreamInfo &hints, CDVDCodecOptions &opti
   {
     switch (hints.codec)
     {
-      case CODEC_ID_MPEG2VIDEO:
+      case AV_CODEC_ID_MPEG2VIDEO:
         m_CodecType = CRYSTALHD_CODEC_ID_MPEG2;
         m_pFormatName = "chd-mpeg2";
       break;
-      case CODEC_ID_H264:
+      case AV_CODEC_ID_H264:
         switch(hints.profile)
         {
           case FF_PROFILE_H264_HIGH_10:
@@ -86,11 +86,11 @@ bool CDVDVideoCodecCrystalHD::Open(CDVDStreamInfo &hints, CDVDCodecOptions &opti
 
         m_pFormatName = "chd-h264";
       break;
-      case CODEC_ID_VC1:
+      case AV_CODEC_ID_VC1:
         m_CodecType = CRYSTALHD_CODEC_ID_VC1;
         m_pFormatName = "chd-vc1";
       break;
-      case CODEC_ID_WMV3:
+      case AV_CODEC_ID_WMV3:
         m_CodecType = CRYSTALHD_CODEC_ID_WMV3;
         m_pFormatName = "chd-wmv3";
       break;
index 7881e58..0591b1f 100644 (file)
@@ -104,7 +104,7 @@ enum PixelFormat CDVDVideoCodecFFmpeg::GetFormat( struct AVCodecContext * avctx
 #ifdef HAVE_LIBVA
     // mpeg4 vaapi decoding is disabled
     if(*cur == PIX_FMT_VAAPI_VLD && CSettings::Get().GetBool("videoplayer.usevaapi") 
-    && (avctx->codec_id != CODEC_ID_MPEG4 || g_advancedSettings.m_videoAllowMpeg4VAAPI)) 
+    && (avctx->codec_id != AV_CODEC_ID_MPEG4 || g_advancedSettings.m_videoAllowMpeg4VAAPI)) 
     {
       if (ctx->GetHardware() != NULL)
       {
@@ -198,7 +198,7 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
   pCodec = NULL;
   m_pCodecContext = NULL;
 
-  if (hints.codec == CODEC_ID_H264)
+  if (hints.codec == AV_CODEC_ID_H264)
   {
     switch(hints.profile)
     {
@@ -256,8 +256,8 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
   // ffmpeg with enabled neon will crash and burn if this is enabled
   m_pCodecContext->flags &= CODEC_FLAG_EMU_EDGE;
 #else
-  if (pCodec->id != CODEC_ID_H264 && pCodec->capabilities & CODEC_CAP_DR1
-      && pCodec->id != CODEC_ID_VP8
+  if (pCodec->id != AV_CODEC_ID_H264 && pCodec->capabilities & CODEC_CAP_DR1
+      && pCodec->id != AV_CODEC_ID_VP8
      )
     m_pCodecContext->flags |= CODEC_FLAG_EMU_EDGE;
 #endif
@@ -292,8 +292,8 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options
 
   int num_threads = std::min(8 /*MAX_THREADS*/, g_cpuInfo.getCPUCount());
   if( num_threads > 1 && !hints.software && m_pHardware == NULL // thumbnail extraction fails when run threaded
-  && ( pCodec->id == CODEC_ID_H264
-    || pCodec->id == CODEC_ID_MPEG4 ))
+  && ( pCodec->id == AV_CODEC_ID_H264
+    || pCodec->id == AV_CODEC_ID_MPEG4 ))
     m_pCodecContext->thread_count = num_threads;
 
   if (m_dllAvCodec.avcodec_open2(m_pCodecContext, pCodec, NULL) < 0)
@@ -492,8 +492,8 @@ int CDVDVideoCodecFFmpeg::Decode(uint8_t* pData, int iSize, double dts, double p
     m_iLastKeyframe = 300;
 
   /* h264 doesn't always have keyframes + won't output before first keyframe anyway */
-  if(m_pCodecContext->codec_id == CODEC_ID_H264
-  || m_pCodecContext->codec_id == CODEC_ID_SVQ3)
+  if(m_pCodecContext->codec_id == AV_CODEC_ID_H264
+  || m_pCodecContext->codec_id == AV_CODEC_ID_SVQ3)
     m_started = true;
 
   if(m_pHardware == NULL)
index 9ec01ec..6c7f659 100644 (file)
@@ -57,7 +57,7 @@ bool CDVDVideoCodecOpenMax::Open(CDVDStreamInfo &hints, CDVDCodecOptions &option
 
     switch (hints.codec)
     {
-      case CODEC_ID_H264:
+      case AV_CODEC_ID_H264:
       {
         m_pFormatName = "omx-h264";
         if (hints.extrasize < 7 || hints.extradata == NULL)
@@ -71,13 +71,13 @@ bool CDVDVideoCodecOpenMax::Open(CDVDStreamInfo &hints, CDVDCodecOptions &option
           m_convert_bitstream = bitstream_convert_init(hints.extradata, hints.extrasize);
       }
       break;
-      case CODEC_ID_MPEG4:
+      case AV_CODEC_ID_MPEG4:
         m_pFormatName = "omx-mpeg4";
       break;
-      case CODEC_ID_MPEG2VIDEO:
+      case AV_CODEC_ID_MPEG2VIDEO:
         m_pFormatName = "omx-mpeg2";
       break;
-      case CODEC_ID_VC1:
+      case AV_CODEC_ID_VC1:
         m_pFormatName = "omx-vc1";
       break;
       default:
index 620aa67..13a3238 100644 (file)
@@ -192,7 +192,7 @@ bool CDVDVideoCodecVDA::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options)
     CFDataRef avcCData;
     switch (hints.codec)
     {
-      case CODEC_ID_H264:
+      case AV_CODEC_ID_H264:
         m_bitstream = new CBitstreamConverter;
         if (!m_bitstream->Open(hints.codec, (uint8_t*)hints.extradata, hints.extrasize, false))
           return false;
index e62306b..9c1a812 100644 (file)
@@ -538,7 +538,7 @@ quicktime_esds_t* quicktime_set_esds(DllAvFormat *av_format_ctx, const uint8_t *
   esds->esid            = 0;
   esds->stream_priority = 0;      // 16 ? 0x1f
   
-  esds->objectTypeId    = 32;     // 32 = CODEC_ID_MPEG4, 33 = CODEC_ID_H264
+  esds->objectTypeId    = 32;     // 32 = AV_CODEC_ID_MPEG4, 33 = AV_CODEC_ID_H264
   // the following fields is made of 6 bits to identify the streamtype (4 for video, 5 for audio)
   // plus 1 bit to indicate upstream and 1 bit set to 1 (reserved)
   esds->streamType      = 0x11;
@@ -1097,7 +1097,7 @@ bool CDVDVideoCodecVideoToolBox::Open(CDVDStreamInfo &hints, CDVDCodecOptions &o
     
     switch (hints.codec)
     {
-      case CODEC_ID_MPEG4:
+      case AV_CODEC_ID_MPEG4:
         if (extrasize)
         {
           AVIOContext *pb;
@@ -1129,12 +1129,12 @@ bool CDVDVideoCodecVideoToolBox::Open(CDVDStreamInfo &hints, CDVDCodecOptions &o
         m_pFormatName = "vtb-mpeg4";
       break;
 
-      case CODEC_ID_MPEG2VIDEO:
+      case AV_CODEC_ID_MPEG2VIDEO:
         m_fmt_desc = CreateFormatDescription(kVTFormatMPEG2Video, width, height);
         m_pFormatName = "vtb-mpeg2";
       break;
 
-      case CODEC_ID_H264:
+      case AV_CODEC_ID_H264:
         if (extrasize < 7 || extradata == NULL)
         {
           //m_fmt_desc = CreateFormatDescription(kVTFormatH264, width, height);
index 3f60662..b7b3be8 100644 (file)
@@ -97,19 +97,19 @@ typedef struct {
 
 /* XXX Prefered modes must come first */
 static const dxva2_mode_t dxva2_modes[] = {
-    { "MPEG2 VLD",    &DXVA2_ModeMPEG2_VLD,     CODEC_ID_MPEG2VIDEO },
-    { "MPEG1/2 VLD",  &DXVA_ModeMPEG2and1_VLD,  CODEC_ID_MPEG2VIDEO },
+    { "MPEG2 VLD",    &DXVA2_ModeMPEG2_VLD,     AV_CODEC_ID_MPEG2VIDEO },
+    { "MPEG1/2 VLD",  &DXVA_ModeMPEG2and1_VLD,  AV_CODEC_ID_MPEG2VIDEO },
     { "MPEG2 MoComp", &DXVA2_ModeMPEG2_MoComp,  0 },
     { "MPEG2 IDCT",   &DXVA2_ModeMPEG2_IDCT,    0 },
 
     // Intel drivers return standard modes in addition to the Intel specific ones. Try the Intel specific first, they work better for Sandy Bridges.
-    { "Intel H.264 VLD, no FGT",                                      &DXVADDI_Intel_ModeH264_E, CODEC_ID_H264 },
+    { "Intel H.264 VLD, no FGT",                                      &DXVADDI_Intel_ModeH264_E, AV_CODEC_ID_H264 },
     { "Intel H.264 inverse discrete cosine transform (IDCT), no FGT", &DXVADDI_Intel_ModeH264_C, 0 },
     { "Intel H.264 motion compensation (MoComp), no FGT",             &DXVADDI_Intel_ModeH264_A, 0 },
     { "Intel VC-1 VLD",                                               &DXVADDI_Intel_ModeVC1_E,  0 },
 
-    { "H.264 variable-length decoder (VLD), FGT",               &DXVA2_ModeH264_F, CODEC_ID_H264 },
-    { "H.264 VLD, no FGT",                                      &DXVA2_ModeH264_E, CODEC_ID_H264 },
+    { "H.264 variable-length decoder (VLD), FGT",               &DXVA2_ModeH264_F, AV_CODEC_ID_H264 },
+    { "H.264 VLD, no FGT",                                      &DXVA2_ModeH264_E, AV_CODEC_ID_H264 },
     { "H.264 IDCT, FGT",                                        &DXVA2_ModeH264_D, 0,            },
     { "H.264 inverse discrete cosine transform (IDCT), no FGT", &DXVA2_ModeH264_C, 0,            },
     { "H.264 MoComp, FGT",                                      &DXVA2_ModeH264_B, 0,            },
@@ -122,10 +122,10 @@ static const dxva2_mode_t dxva2_modes[] = {
     { "Windows Media Video 9 MoComp",           &DXVA2_ModeWMV9_B, 0 },
     { "Windows Media Video 9 post processing",  &DXVA2_ModeWMV9_A, 0 },
 
-    { "VC-1 VLD",             &DXVA2_ModeVC1_D,    CODEC_ID_VC1 },
-    { "VC-1 VLD",             &DXVA2_ModeVC1_D,    CODEC_ID_WMV3 },
-    { "VC-1 VLD 2010",        &DXVA_ModeVC1_D2010, CODEC_ID_VC1 },
-    { "VC-1 VLD 2010",        &DXVA_ModeVC1_D2010, CODEC_ID_WMV3 },
+    { "VC-1 VLD",             &DXVA2_ModeVC1_D,    AV_CODEC_ID_VC1 },
+    { "VC-1 VLD",             &DXVA2_ModeVC1_D,    AV_CODEC_ID_WMV3 },
+    { "VC-1 VLD 2010",        &DXVA_ModeVC1_D2010, AV_CODEC_ID_VC1 },
+    { "VC-1 VLD 2010",        &DXVA_ModeVC1_D2010, AV_CODEC_ID_WMV3 },
     { "VC-1 IDCT",            &DXVA2_ModeVC1_C,    0 },
     { "VC-1 MoComp",          &DXVA2_ModeVC1_B,    0 },
     { "VC-1 post processing", &DXVA2_ModeVC1_A,    0 },
@@ -437,7 +437,7 @@ static bool HasVP3WidthBug(AVCodecContext *avctx)
 static bool CheckCompatibility(AVCodecContext *avctx)
 {
   // The incompatibilities are all for H264
-  if(avctx->codec_id != CODEC_ID_H264)
+  if(avctx->codec_id != AV_CODEC_ID_H264)
     return true;
 
   // Macroblock width incompatibility
@@ -628,7 +628,7 @@ bool CDecoder::Open(AVCodecContext *avctx, enum PixelFormat fmt, unsigned int su
 
   if(m_refs == 0)
   {
-    if(avctx->codec_id == CODEC_ID_H264)
+    if(avctx->codec_id == AV_CODEC_ID_H264)
       m_refs = 16;
     else
       m_refs = 2;
@@ -773,9 +773,9 @@ int CDecoder::Check(AVCodecContext* avctx)
   }
 
   // Status reports are available only for the DXVA2_ModeH264 and DXVA2_ModeVC1 modes
-  if(avctx->codec_id != CODEC_ID_H264
-  && avctx->codec_id != CODEC_ID_VC1
-  && avctx->codec_id != CODEC_ID_WMV3)
+  if(avctx->codec_id != AV_CODEC_ID_H264
+  && avctx->codec_id != AV_CODEC_ID_VC1
+  && avctx->codec_id != AV_CODEC_ID_WMV3)
     return 0;
 
   DXVA2_DecodeExecuteParams params = {};
@@ -788,7 +788,7 @@ int CDecoder::Check(AVCodecContext* avctx)
   params.pExtensionData = &data;
   data.Function = DXVA_STATUS_REPORTING_FUNCTION;
   data.pPrivateOutputData    = &status;
-  data.PrivateOutputDataSize = avctx->codec_id == CODEC_ID_H264 ? sizeof(DXVA_Status_H264) : sizeof(DXVA_Status_VC1);
+  data.PrivateOutputDataSize = avctx->codec_id == AV_CODEC_ID_H264 ? sizeof(DXVA_Status_H264) : sizeof(DXVA_Status_VC1);
   HRESULT hr;
   if(FAILED( hr = m_decoder->Execute(&params)))
   {
@@ -796,7 +796,7 @@ int CDecoder::Check(AVCodecContext* avctx)
     return VC_ERROR;
   }
 
-  if(avctx->codec_id == CODEC_ID_H264)
+  if(avctx->codec_id == AV_CODEC_ID_H264)
   {
     if(status.h264.bStatus)
       CLog::Log(LOGWARNING, "DXVA - decoder problem of status %d with %d", status.h264.bStatus, status.h264.bBufType);
@@ -1287,6 +1287,14 @@ bool CProcessor::OpenProcessor()
   D3DFORMAT rtFormat = D3DFMT_X8R8G8B8;
   CHECK(m_service->GetVideoProcessorCaps(m_device, &m_desc, rtFormat, &m_caps))
 
+  /* HACK for Intel Egde Device. 
+   * won't work if backward refs is equals value from the capabilities *
+   * Possible reasons are:                                             *
+   * 1) The device capabilities are incorrectly reported               *
+   * 2) The device is broken                                           */
+  if (IsEqualGUID(m_device, DXVA2_VideoProcIntelEdgeDevice))
+    m_caps.NumBackwardRefSamples = 0;
+
   if (m_caps.DeviceCaps & DXVA2_VPDev_SoftwareDevice)
     CLog::Log(LOGDEBUG, "DXVA - processor is software device");
 
index a3cb0c5..5cd0255 100644 (file)
@@ -124,7 +124,7 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints)
 
   switch (hints.codec)
   {
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
     {
       switch(hints.profile)
       {
@@ -149,7 +149,7 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints)
       }
     }
     break;
-    case CODEC_ID_MPEG4:
+    case AV_CODEC_ID_MPEG4:
       // (role name) video_decoder.mpeg4
       // MPEG-4, DivX 4/5 and Xvid compatible
       decoder_name = OMX_MPEG4_DECODER;
@@ -163,12 +163,12 @@ bool COpenMaxVideo::Open(CDVDStreamInfo &hints)
       m_pFormatName = "omx-mpeg4";
     break;
     */
-    case CODEC_ID_MPEG2VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO:
       // (role name) video_decoder.mpeg2
       // MPEG-2
       decoder_name = OMX_MPEG2V_DECODER;
     break;
-    case CODEC_ID_VC1:
+    case AV_CODEC_ID_VC1:
       // (role name) video_decoder.vc1
       // VC-1, WMV9
       decoder_name = OMX_VC1_DECODER;
index dd96ce8..2343b11 100644 (file)
@@ -268,14 +268,14 @@ bool CDecoder::Open(AVCodecContext *avctx, enum PixelFormat fmt, unsigned int su
 
   vector<VAProfile> accepted;
   switch (avctx->codec_id) {
-    case CODEC_ID_MPEG2VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO:
       accepted.push_back(VAProfileMPEG2Main);
       break;
-    case CODEC_ID_MPEG4:
-    case CODEC_ID_H263:
+    case AV_CODEC_ID_MPEG4:
+    case AV_CODEC_ID_H263:
       accepted.push_back(VAProfileMPEG4AdvancedSimple);
       break;
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
     {
 #ifdef FF_PROFILE_H264_BASELINE
       if  (avctx->profile == FF_PROFILE_H264_BASELINE)
@@ -294,10 +294,10 @@ bool CDecoder::Open(AVCodecContext *avctx, enum PixelFormat fmt, unsigned int su
       }
       break;
     }
-    case CODEC_ID_WMV3:
+    case AV_CODEC_ID_WMV3:
       accepted.push_back(VAProfileVC1Main);
       break;
-    case CODEC_ID_VC1:
+    case AV_CODEC_ID_VC1:
       accepted.push_back(VAProfileVC1Advanced);
       break;
     default:
@@ -384,7 +384,7 @@ bool CDecoder::EnsureContext(AVCodecContext *avctx)
   m_refs = avctx->refs;
   if(m_refs == 0)
   {
-    if(avctx->codec_id == CODEC_ID_H264)
+    if(avctx->codec_id == AV_CODEC_ID_H264)
       m_refs = 16;
     else
       m_refs = 2;
index 03d40f2..4e00208 100644 (file)
@@ -185,7 +185,7 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su
     return false;
   }
 
-  if ((avctx->codec_id == CODEC_ID_MPEG4) && !g_advancedSettings.m_videoAllowMpeg4VDPAU)
+  if ((avctx->codec_id == AV_CODEC_ID_MPEG4) && !g_advancedSettings.m_videoAllowMpeg4VDPAU)
     return false;
 
   if (!dl_handle)
@@ -214,10 +214,10 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su
     SpewHardwareAvailable();
 
     VdpDecoderProfile profile = 0;
-    if(avctx->codec_id == CODEC_ID_H264)
+    if(avctx->codec_id == AV_CODEC_ID_H264)
       profile = VDP_DECODER_PROFILE_H264_HIGH;
 #ifdef VDP_DECODER_PROFILE_MPEG4_PART2_ASP
-    else if(avctx->codec_id == CODEC_ID_MPEG4)
+    else if(avctx->codec_id == AV_CODEC_ID_MPEG4)
       profile = VDP_DECODER_PROFILE_MPEG4_PART2_ASP;
 #endif
     if(profile)
index d72973f..f8d5d1e 100644 (file)
@@ -30,8 +30,8 @@ void CDemuxStreamAudio::GetStreamType(std::string& strInfo)
 {
   char sInfo[64];
 
-  if (codec == CODEC_ID_AC3) strcpy(sInfo, "AC3 ");
-  else if (codec == CODEC_ID_DTS)
+  if (codec == AV_CODEC_ID_AC3) strcpy(sInfo, "AC3 ");
+  else if (codec == AV_CODEC_ID_DTS)
   {
 #ifdef FF_PROFILE_DTS_HD_MA
     if (profile == FF_PROFILE_DTS_HD_MA)
@@ -42,8 +42,8 @@ void CDemuxStreamAudio::GetStreamType(std::string& strInfo)
 #endif
       strcpy(sInfo, "DTS ");
   }
-  else if (codec == CODEC_ID_MP2) strcpy(sInfo, "MP2 ");
-  else if (codec == CODEC_ID_TRUEHD) strcpy(sInfo, "Dolby TrueHD ");
+  else if (codec == AV_CODEC_ID_MP2) strcpy(sInfo, "MP2 ");
+  else if (codec == AV_CODEC_ID_TRUEHD) strcpy(sInfo, "Dolby TrueHD ");
   else strcpy(sInfo, "");
 
   if (iChannels == 1) strcat(sInfo, "Mono");
index 3c5f366..2a98c5a 100644 (file)
@@ -35,7 +35,7 @@ class CDVDInputStream;
   #include "config.h"
 #endif
 #ifndef TARGET_POSIX
-// enum CodecID; // auto defined when neccesary
+// enum AVCodecID; // auto defined when neccesary
 #include <libavcodec/avcodec.h>
 #else
 extern "C" {
@@ -88,7 +88,7 @@ public:
   {
     iId = 0;
     iPhysicalId = 0;
-    codec = (CodecID)0; // CODEC_ID_NONE
+    codec = (AVCodecID)0; // AV_CODEC_ID_NONE
     codec_fourcc = 0;
     profile = FF_PROFILE_UNKNOWN;
     level = 0;
@@ -122,7 +122,7 @@ public:
 
   int iId;         // most of the time starting from 0
   int iPhysicalId; // id
-  CodecID codec;
+  AVCodecID codec;
   unsigned int codec_fourcc; // if available
   int profile; // encoder profile of the stream reported by the decoder. used to qualify hw decoders.
   int level;   // encoder level of the stream reported by the decoder. used to qualify hw decoders.
index 2852ccc..444357b 100644 (file)
@@ -91,7 +91,7 @@ bool CDVDDemuxBXA::Open(CDVDInputStream* pInput)
   m_stream->iBitRate        = m_header.sampleRate * m_header.channels * m_header.bitsPerSample;
   m_stream->iChannels       = m_header.channels;
   m_stream->type            = STREAM_AUDIO;
-  m_stream->codec           = CODEC_ID_PCM_S16LE;
+  m_stream->codec           = AV_CODEC_ID_PCM_S16LE;
 
   return true;
 }
index 912678a..ef3fcc7 100644 (file)
@@ -71,7 +71,7 @@ bool CDVDDemuxCDDA::Open(CDVDInputStream* pInput)
   m_stream->iBitRate        = 44100 * 2 * 16;
   m_stream->iChannels       = 2;
   m_stream->type            = STREAM_AUDIO;
-  m_stream->codec           = CODEC_ID_PCM_S16LE;
+  m_stream->codec           = AV_CODEC_ID_PCM_S16LE;
 
   return true;
 }
index 098e6e2..18c1c4b 100644 (file)
@@ -464,7 +464,7 @@ bool CDVDDemuxFFmpeg::Open(CDVDInputStream* pInput)
       CLog::Log(LOGWARNING,"could not find codec parameters for %s", strFile.c_str());
       if (m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD)
       ||  m_pInput->IsStreamType(DVDSTREAM_TYPE_BLURAY)
-      || (m_pFormatContext->nb_streams == 1 && m_pFormatContext->streams[0]->codec->codec_id == CODEC_ID_AC3))
+      || (m_pFormatContext->nb_streams == 1 && m_pFormatContext->streams[0]->codec->codec_id == AV_CODEC_ID_AC3))
       {
         // special case, our codecs can still handle it.
       }
@@ -758,7 +758,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read()
         }
 
         // we need to get duration slightly different for matroska embedded text subtitels
-        if(m_bMatroska && stream->codec->codec_id == CODEC_ID_TEXT && m_pkt.pkt.convergence_duration != 0)
+        if(m_bMatroska && stream->codec->codec_id == AV_CODEC_ID_TEXT && m_pkt.pkt.convergence_duration != 0)
           m_pkt.pkt.duration = m_pkt.pkt.convergence_duration;
 
         if(m_bAVI && stream->codec && stream->codec->codec_type == AVMEDIA_TYPE_VIDEO)
@@ -1090,7 +1090,7 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int iId)
           st->bVFR = false;
 
         // never trust pts in avi files with h264.
-        if (m_bAVI && pStream->codec->codec_id == CODEC_ID_H264)
+        if (m_bAVI && pStream->codec->codec_id == AV_CODEC_ID_H264)
           st->bPTSInvalid = true;
 
         //average fps is more accurate for mkv files
@@ -1143,15 +1143,15 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int iId)
         
         if ( m_pInput->IsStreamType(DVDSTREAM_TYPE_DVD) )
         {
-          if (pStream->codec->codec_id == CODEC_ID_PROBE)
+          if (pStream->codec->codec_id == AV_CODEC_ID_PROBE)
           {
-            // fix MPEG-1/MPEG-2 video stream probe returning CODEC_ID_PROBE for still frames.
+            // fix MPEG-1/MPEG-2 video stream probe returning AV_CODEC_ID_PROBE for still frames.
             // ffmpeg issue 1871, regression from ffmpeg r22831.
             if ((pStream->id & 0xF0) == 0xE0)
             {
-              pStream->codec->codec_id = CODEC_ID_MPEG2VIDEO;
+              pStream->codec->codec_id = AV_CODEC_ID_MPEG2VIDEO;
               pStream->codec->codec_tag = MKTAG('M','P','2','V');
-              CLog::Log(LOGERROR, "%s - CODEC_ID_PROBE detected, forcing CODEC_ID_MPEG2VIDEO", __FUNCTION__);
+              CLog::Log(LOGERROR, "%s - AV_CODEC_ID_PROBE detected, forcing AV_CODEC_ID_MPEG2VIDEO", __FUNCTION__);
             }
           }
         }
@@ -1165,7 +1165,7 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int iId)
       }
     case AVMEDIA_TYPE_SUBTITLE:
       {
-        if (pStream->codec->codec_id == CODEC_ID_DVB_TELETEXT && CSettings::Get().GetBool("videoplayer.teletextenabled"))
+        if (pStream->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT && CSettings::Get().GetBool("videoplayer.teletextenabled"))
         {
           CDemuxStreamTeletext* st = new CDemuxStreamTeletext();
           stream = st;
@@ -1185,9 +1185,9 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int iId)
       }
     case AVMEDIA_TYPE_ATTACHMENT:
       { //mkv attachments. Only bothering with fonts for now.
-        if(pStream->codec->codec_id == CODEC_ID_TTF
+        if(pStream->codec->codec_id == AV_CODEC_ID_TTF
 #if (!defined USE_EXTERNAL_FFMPEG)
-          || pStream->codec->codec_id == CODEC_ID_OTF
+          || pStream->codec->codec_id == AV_CODEC_ID_OTF
 #endif
           )
         {
@@ -1256,19 +1256,19 @@ CDemuxStream* CDVDDemuxFFmpeg::AddStream(int iId)
       // id's reported from libdvdnav
       switch(stream->codec)
       {
-        case CODEC_ID_AC3:
+        case AV_CODEC_ID_AC3:
           stream->iPhysicalId = pStream->id - 128;
           break;
-        case CODEC_ID_DTS:
+        case AV_CODEC_ID_DTS:
           stream->iPhysicalId = pStream->id - 136;
           break;
-        case CODEC_ID_MP2:
+        case AV_CODEC_ID_MP2:
           stream->iPhysicalId = pStream->id - 448;
           break;
-        case CODEC_ID_PCM_S16BE:
+        case AV_CODEC_ID_PCM_S16BE:
           stream->iPhysicalId = pStream->id - 160;
           break;
-        case CODEC_ID_DVD_SUBTITLE:
+        case AV_CODEC_ID_DVD_SUBTITLE:
           stream->iPhysicalId = pStream->id - 0x20;
           break;
         default:
@@ -1434,7 +1434,7 @@ void CDVDDemuxFFmpeg::GetStreamCodecName(int iStreamId, CStdString &strName)
 
 #ifdef FF_PROFILE_DTS_HD_MA
     /* use profile to determine the DTS type */
-    if (stream->codec == CODEC_ID_DTS)
+    if (stream->codec == AV_CODEC_ID_DTS)
     {
       if (stream->profile == FF_PROFILE_DTS_HD_MA)
         strName = "dtshd_ma";
index fbb4fa0..3807840 100644 (file)
@@ -290,29 +290,29 @@ void CDVDDemuxHTSP::SubscriptionStart (htsmsg_t *m)
 
     if(!strcmp(type, "AC3")) {
       st.a = new CDemuxStreamAudioHTSP(this, type);
-      st.a->codec = CODEC_ID_AC3;
+      st.a->codec = AV_CODEC_ID_AC3;
     } else if(!strcmp(type, "EAC3")) {
       st.a = new CDemuxStreamAudioHTSP(this, type);
-      st.a->codec = CODEC_ID_EAC3;
+      st.a->codec = AV_CODEC_ID_EAC3;
     } else if(!strcmp(type, "MPEG2AUDIO")) {
       st.a = new CDemuxStreamAudioHTSP(this, type);
-      st.a->codec = CODEC_ID_MP2;
+      st.a->codec = AV_CODEC_ID_MP2;
     } else if(!strcmp(type, "AAC")) {
       st.a = new CDemuxStreamAudioHTSP(this, type);
-      st.a->codec = CODEC_ID_AAC;
+      st.a->codec = AV_CODEC_ID_AAC;
     } else if(!strcmp(type, "MPEG2VIDEO")) {
       st.v = new CDemuxStreamVideoHTSP(this, type);
-      st.v->codec = CODEC_ID_MPEG2VIDEO;
+      st.v->codec = AV_CODEC_ID_MPEG2VIDEO;
       st.v->iWidth  = htsmsg_get_u32_or_default(sub, "width" , 0);
       st.v->iHeight = htsmsg_get_u32_or_default(sub, "height", 0);
     } else if(!strcmp(type, "H264")) {
       st.v = new CDemuxStreamVideoHTSP(this, type);
-      st.v->codec = CODEC_ID_H264;
+      st.v->codec = AV_CODEC_ID_H264;
       st.v->iWidth  = htsmsg_get_u32_or_default(sub, "width" , 0);
       st.v->iHeight = htsmsg_get_u32_or_default(sub, "height", 0);
     } else if(!strcmp(type, "DVBSUB")) {
       st.s = new CDemuxStreamSubtitle();
-      st.s->codec = CODEC_ID_DVB_SUBTITLE;
+      st.s->codec = AV_CODEC_ID_DVB_SUBTITLE;
       uint32_t composition_id = 0, ancillary_id = 0;
       htsmsg_get_u32(sub, "composition_id", &composition_id);
       htsmsg_get_u32(sub, "ancillary_id"  , &ancillary_id);
@@ -325,10 +325,10 @@ void CDVDDemuxHTSP::SubscriptionStart (htsmsg_t *m)
       }
     } else if(!strcmp(type, "TEXTSUB")) {
       st.s = new CDemuxStreamSubtitle();
-      st.s->codec = CODEC_ID_TEXT;
+      st.s->codec = AV_CODEC_ID_TEXT;
     } else if(!strcmp(type, "TELETEXT")) {
       st.t = new CDemuxStreamTeletext();
-      st.t->codec = CODEC_ID_DVB_TELETEXT;
+      st.t->codec = AV_CODEC_ID_DVB_TELETEXT;
     } else {
       continue;
     }
index 2c10a7b..305ba07 100644 (file)
@@ -61,10 +61,10 @@ void CDemuxStreamVideoPVRClient::GetStreamInfo(std::string& strInfo)
 {
   switch (codec)
   {
-    case CODEC_ID_MPEG2VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO:
       strInfo = "mpeg2video";
       break;
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
       strInfo = "h264";
       break;
     default:
@@ -76,19 +76,19 @@ void CDemuxStreamAudioPVRClient::GetStreamInfo(std::string& strInfo)
 {
   switch (codec)
   {
-    case CODEC_ID_AC3:
+    case AV_CODEC_ID_AC3:
       strInfo = "ac3";
       break;
-    case CODEC_ID_EAC3:
+    case AV_CODEC_ID_EAC3:
       strInfo = "eac3";
       break;
-    case CODEC_ID_MP2:
+    case AV_CODEC_ID_MP2:
       strInfo = "mpeg2audio";
       break;
-    case CODEC_ID_AAC:
+    case AV_CODEC_ID_AAC:
       strInfo = "aac";
       break;
-    case CODEC_ID_DTS:
+    case AV_CODEC_ID_DTS:
       strInfo = "dts";
       break;
     default:
@@ -340,7 +340,7 @@ void CDVDDemuxPVRClient::RequestStreams()
       {
         st = dynamic_cast<CDemuxStreamAudioPVRClient*>(stm);
         if (!st
-            || (st->codec != (CodecID)props.stream[i].iCodecId)
+            || (st->codec != (AVCodecID)props.stream[i].iCodecId)
             || (st->iChannels != props.stream[i].iChannels))
           DisposeStream(i);
       }
@@ -366,7 +366,7 @@ void CDVDDemuxPVRClient::RequestStreams()
       {
         st = dynamic_cast<CDemuxStreamVideoPVRClient*>(stm);
         if (!st
-            || (st->codec != (CodecID)props.stream[i].iCodecId)
+            || (st->codec != (AVCodecID)props.stream[i].iCodecId)
             || (st->iWidth != props.stream[i].iWidth)
             || (st->iHeight != props.stream[i].iHeight))
           DisposeStream(i);
@@ -386,11 +386,11 @@ void CDVDDemuxPVRClient::RequestStreams()
       m_streams[i] = st;
       st->m_parser_split = true;
     }
-    else if (props.stream[i].iCodecId == CODEC_ID_DVB_TELETEXT)
+    else if (props.stream[i].iCodecId == AV_CODEC_ID_DVB_TELETEXT)
     {
       if (stm)
       {
-        if (stm->codec != (CodecID)props.stream[i].iCodecId)
+        if (stm->codec != (AVCodecID)props.stream[i].iCodecId)
           DisposeStream(i);
       }
       if (!m_streams[i])
@@ -402,7 +402,7 @@ void CDVDDemuxPVRClient::RequestStreams()
       if (stm)
       {
         st = dynamic_cast<CDemuxStreamSubtitlePVRClient*>(stm);
-        if (!st || (st->codec != (CodecID)props.stream[i].iCodecId))
+        if (!st || (st->codec != (AVCodecID)props.stream[i].iCodecId))
           DisposeStream(i);
       }
       if (!m_streams[i])
@@ -425,7 +425,7 @@ void CDVDDemuxPVRClient::RequestStreams()
       m_streams[i] = new CDemuxStream();
     }
 
-    m_streams[i]->codec       = (CodecID)props.stream[i].iCodecId;
+    m_streams[i]->codec       = (AVCodecID)props.stream[i].iCodecId;
     m_streams[i]->iId         = i;
     m_streams[i]->iPhysicalId = props.stream[i].iPhysicalId;
     m_streams[i]->language[0] = props.stream[i].strLanguage[0];
@@ -472,19 +472,19 @@ void CDVDDemuxPVRClient::GetStreamCodecName(int iStreamId, CStdString &strName)
   CDemuxStream *stream = GetStream(iStreamId);
   if (stream)
   {
-    if (stream->codec == CODEC_ID_AC3)
+    if (stream->codec == AV_CODEC_ID_AC3)
       strName = "ac3";
-    else if (stream->codec == CODEC_ID_MP2)
+    else if (stream->codec == AV_CODEC_ID_MP2)
       strName = "mp2";
-    else if (stream->codec == CODEC_ID_AAC)
+    else if (stream->codec == AV_CODEC_ID_AAC)
       strName = "aac";
-    else if (stream->codec == CODEC_ID_DTS)
+    else if (stream->codec == AV_CODEC_ID_DTS)
       strName = "dca";
-    else if (stream->codec == CODEC_ID_MPEG2VIDEO)
+    else if (stream->codec == AV_CODEC_ID_MPEG2VIDEO)
       strName = "mpeg2video";
-    else if (stream->codec == CODEC_ID_H264)
+    else if (stream->codec == AV_CODEC_ID_H264)
       strName = "h264";
-    else if (stream->codec == CODEC_ID_EAC3)
+    else if (stream->codec == AV_CODEC_ID_EAC3)
       strName = "eac3";
   }
 }
index 30008f1..f49ca83 100644 (file)
@@ -86,12 +86,12 @@ bool CDVDDemuxShoutcast::Open(CDVDInputStream* pInput)
       stricmp(strMimeType.c_str(), CONTENT_TYPE_AACPLUS) == 0)
   {
     // need an aac decoder first
-    m_pDemuxStream->codec = CODEC_ID_AAC;
+    m_pDemuxStream->codec = AV_CODEC_ID_AAC;
   }
   else // (stricmp(strMimeType, CONTENT_TYPE_MP3) == 0)
   {
     // default to mp3
-    m_pDemuxStream->codec = CODEC_ID_MP3;
+    m_pDemuxStream->codec = AV_CODEC_ID_MP3;
   }
 
   return true;
index dc8053f..af61fe3 100644 (file)
@@ -71,7 +71,7 @@ bool CDVDDemuxVobsub::Open(const string& filename, const string& subfilename)
 
   CDVDStreamInfo hints;
   CDVDCodecOptions options;
-  hints.codec = CODEC_ID_DVD_SUBTITLE;
+  hints.codec = AV_CODEC_ID_DVD_SUBTITLE;
 
   char line[2048];
   DECLARE_UNUSED(bool,res)
@@ -212,7 +212,7 @@ bool CDVDDemuxVobsub::ParseId(SState& state, char* line)
   else
     stream->iPhysicalId = -1;
 
-  stream->codec = CODEC_ID_DVD_SUBTITLE;
+  stream->codec = AV_CODEC_ID_DVD_SUBTITLE;
   stream->iId = m_Streams.size();
 
   state.id = stream->iId;
index 81058b7..9ad6bdf 100644 (file)
@@ -162,7 +162,7 @@ bool CDVDFileInfo::ExtractThumb(const CStdString &strPath, CTextureDetails &deta
     CDVDStreamInfo hint(*pDemuxer->GetStream(nVideoStream), true);
     hint.software = true;
 
-    if (hint.codec == CODEC_ID_MPEG2VIDEO || hint.codec == CODEC_ID_MPEG1VIDEO)
+    if (hint.codec == AV_CODEC_ID_MPEG2VIDEO || hint.codec == AV_CODEC_ID_MPEG1VIDEO)
     {
       // libmpeg2 is not thread safe so use ffmepg for mpeg2/mpeg1 thumb extraction
       CDVDCodecOptions dvdOptions;
index cb69187..283c44d 100644 (file)
@@ -85,7 +85,7 @@ void CDVDPlayerSubtitle::SendMessage(CDVDMsg* pMsg)
         }
       }
     }
-    else if (m_streaminfo.codec == CODEC_ID_DVD_SUBTITLE)
+    else if (m_streaminfo.codec == AV_CODEC_ID_DVD_SUBTITLE)
     {
       CDVDOverlaySpu* pSPUInfo = m_dvdspus.AddData(pPacket->pData, pPacket->iSize, pPacket->pts);
       if (pSPUInfo)
@@ -169,7 +169,7 @@ bool CDVDPlayerSubtitle::OpenStream(CDVDStreamInfo &hints, string &filename)
   }
 
   // dvd's use special subtitle decoder
-  if(hints.codec == CODEC_ID_DVD_SUBTITLE && filename == "dvd")
+  if(hints.codec == AV_CODEC_ID_DVD_SUBTITLE && filename == "dvd")
     return true;
 
   m_pOverlayCodec = CDVDFactoryCodec::CreateOverlayCodec(hints);
index 4d373f0..6a35799 100644 (file)
@@ -113,7 +113,7 @@ CDVDTeletextData::~CDVDTeletextData()
 
 bool CDVDTeletextData::CheckStream(CDVDStreamInfo &hints)
 {
-  if (hints.codec == CODEC_ID_DVB_TELETEXT)
+  if (hints.codec == AV_CODEC_ID_DVB_TELETEXT)
     return true;
 
   return false;
@@ -123,7 +123,7 @@ bool CDVDTeletextData::OpenStream(CDVDStreamInfo &hints)
 {
   m_messageQueue.Init();
 
-  if (hints.codec == CODEC_ID_DVB_TELETEXT)
+  if (hints.codec == AV_CODEC_ID_DVB_TELETEXT)
   {
     CLog::Log(LOGNOTICE, "Creating teletext data thread");
     Create();
index bf484ea..5f763c0 100644 (file)
@@ -31,7 +31,6 @@
 #include "cores/VideoRenderers/RenderManager.h"
 #endif
 
-enum CodecID;
 class CDemuxStreamVideo;
 class CDVDOverlayCodecCC;
 
index 8947481..37c16a3 100644 (file)
@@ -38,7 +38,7 @@ CDVDStreamInfo::~CDVDStreamInfo()
 
 void CDVDStreamInfo::Clear()
 {
-  codec = CODEC_ID_NONE;
+  codec = AV_CODEC_ID_NONE;
   type = STREAM_NONE;
   software = false;
   codec_tag  = 0;
index 1b9d88f..b847206 100644 (file)
@@ -55,7 +55,7 @@ public:
   void Assign(const CDVDStreamInfo &right, bool withextradata);
   void Assign(const CDemuxStream &right, bool withextradata);
 
-  CodecID codec;
+  AVCodecID codec;
   StreamType type;
   bool software;  //force software decoding
 
index e9111d3..fb9658e 100644 (file)
@@ -106,12 +106,14 @@ COMXAudio::COMXAudio() :
   m_omx_clock       (NULL   ),
   m_av_clock        (NULL   ),
   m_settings_changed(false  ),
+  m_setStartTime    (false  ),
   m_LostSync        (true   ),
   m_SampleRate      (0      ),
   m_eEncoding       (OMX_AUDIO_CodingPCM),
   m_extradata       (NULL   ),
   m_extrasize       (0      ),
-  m_last_pts        (DVD_NOPTS_VALUE)
+  m_last_pts        (DVD_NOPTS_VALUE),
+  m_submitted_eos   (false  )
 {
   m_vizBufferSize   = m_vizRemapBufferSize = VIS_PACKET_SIZE * sizeof(float);
   m_vizRemapBuffer  = (uint8_t *)_aligned_malloc(m_vizRemapBufferSize,16);
@@ -181,6 +183,27 @@ bool COMXAudio::PortSettingsChanged()
   if(!m_omx_render.Initialize("OMX.broadcom.audio_render", OMX_IndexParamAudioInit))
     return false;
 
+  if(!m_Passthrough)
+  {
+    /* setup mixer output */
+    OMX_INIT_STRUCTURE(m_pcm_output);
+    m_pcm_output.nPortIndex      = m_omx_decoder.GetOutputPort();
+    omx_err = m_omx_decoder.GetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
+    if(omx_err != OMX_ErrorNone)
+    {
+       CLog::Log(LOGERROR, "%s::%s - error SetParameter 1 output omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+    }
+    m_pcm_output.nPortIndex      = m_omx_mixer.GetOutputPort();
+    omx_err = m_omx_mixer.SetParameter(OMX_IndexParamAudioPcm, &m_pcm_output);
+    if(omx_err != OMX_ErrorNone)
+    {
+      CLog::Log(LOGERROR, "%s::%s - error SetParameter 1 output omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+    }
+    CLog::Log(LOGDEBUG, "%s::%s - Output bps %d samplerate %d channels %d buffer size %d bytes per second %d",
+        CLASSNAME, __func__, (int)m_pcm_output.nBitPerSample, (int)m_pcm_output.nSamplingRate, (int)m_pcm_output.nChannels, m_BufferLen, m_BytesPerSec);
+    PrintPCM(&m_pcm_output, std::string("output"));
+  }
+
   m_omx_tunnel_clock.Initialize(m_omx_clock, m_omx_clock->GetInputPort(), &m_omx_render, m_omx_render.GetInputPort()+1);
 
   omx_err = m_omx_tunnel_clock.Establish(false);
@@ -192,6 +215,19 @@ bool COMXAudio::PortSettingsChanged()
 
   m_omx_render.ResetEos();
 
+  // By default audio_render is the clock master, and if output samples don't fit the timestamps, it will speed up/slow down the clock.
+  // This tends to be better for maintaining audio sync and avoiding audio glitches, but can affect video/display sync
+  if(CSettings::Get().GetBool("videoplayer.usedisplayasclock"))
+  {
+    OMX_CONFIG_BOOLEANTYPE configBool;
+    OMX_INIT_STRUCTURE(configBool);
+    configBool.bEnabled = OMX_FALSE;
+
+    omx_err = m_omx_render.SetConfig(OMX_IndexConfigBrcmClockReferenceSource, &configBool);
+    if (omx_err != OMX_ErrorNone)
+       return false;
+  }
+
   OMX_CONFIG_BRCMAUDIODESTINATIONTYPE audioDest;
   OMX_INIT_STRUCTURE(audioDest);
   strncpy((char *)audioDest.sName, m_deviceuse.c_str(), strlen(m_deviceuse.c_str()));
@@ -345,25 +381,13 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
     m_vizRemap.Initialize(m_format.m_channelLayout, CAEChannelInfo(AE_CH_LAYOUT_2_0), false, true);
   }
 
-  OMX_INIT_STRUCTURE(m_pcm_output);
   OMX_INIT_STRUCTURE(m_pcm_input);
 
-  memcpy(m_pcm_output.eChannelMapping, m_output_channels, sizeof(m_output_channels));
   memcpy(m_pcm_input.eChannelMapping, m_input_channels, sizeof(m_input_channels));
 
-  // set the m_pcm_output parameters
-  m_pcm_output.eNumData            = OMX_NumericalDataSigned;
-  m_pcm_output.eEndian             = OMX_EndianLittle;
-  m_pcm_output.bInterleaved        = OMX_TRUE;
-  m_pcm_output.nBitPerSample       = 16; // float is decoded to 16bit integer by gpu
-  m_pcm_output.ePCMMode            = OMX_AUDIO_PCMModeLinear;
-  m_pcm_output.nChannels           = m_OutputChannels;
-  m_pcm_output.nSamplingRate       = m_format.m_sampleRate;
-
   m_SampleRate    = m_format.m_sampleRate;
   m_BitsPerSample = CAEUtil::DataFormatToBits(m_format.m_dataFormat);
-  m_BufferLen     = m_BytesPerSec = m_format.m_sampleRate * 
-    (m_BitsPerSample >> 3) * m_format.m_channelLayout.Count();
+  m_BufferLen     = m_BytesPerSec = m_format.m_sampleRate * (16 >> 3) * m_format.m_channelLayout.Count();
   m_BufferLen     *= AUDIO_BUFFER_SECONDS;
   // should be big enough that common formats (e.g. 6 channel DTS) fit in a single packet.
   // we don't mind less common formats being split (e.g. ape/wma output large frames)
@@ -406,7 +430,7 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
     return false;
   }
 
-  // set up the number/size of buffers
+  // set up the number/size of buffers for decoder input
   OMX_PARAM_PORTDEFINITIONTYPE port_param;
   OMX_INIT_STRUCTURE(port_param);
   port_param.nPortIndex = m_omx_decoder.GetInputPort();
@@ -414,14 +438,14 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
   omx_err = m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition, &port_param);
   if(omx_err != OMX_ErrorNone)
   {
-    CLog::Log(LOGERROR, "COMXAudio::Initialize error get OMX_IndexParamPortDefinition omx_err(0x%08x)\n", omx_err);
+    CLog::Log(LOGERROR, "COMXAudio::Initialize error get OMX_IndexParamPortDefinition (input) omx_err(0x%08x)\n", omx_err);
     return false;
   }
 
   port_param.format.audio.eEncoding = m_eEncoding;
 
   port_param.nBufferSize = m_ChunkLen;
-  port_param.nBufferCountActual = m_BufferLen / m_ChunkLen;
+  port_param.nBufferCountActual = std::max(port_param.nBufferCountMin, 6U);
 
   omx_err = m_omx_decoder.SetParameter(OMX_IndexParamPortDefinition, &port_param);
   if(omx_err != OMX_ErrorNone)
@@ -441,7 +465,7 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
     return false;
   }
 
-  //port_param.nBufferCountActual = std::max(1, (int)(m_BufferLen / port_param.nBufferSize));
+  port_param.nBufferCountActual = std::max(port_param.nBufferCountMin, m_BufferLen / port_param.nBufferSize);
 
   omx_err = m_omx_decoder.SetParameter(OMX_IndexParamPortDefinition, &port_param);
   if(omx_err != OMX_ErrorNone)
@@ -546,12 +570,13 @@ bool COMXAudio::Initialize(AEAudioFormat format, std::string& device, OMXClock *
 
   m_Initialized   = true;
   m_settings_changed = false;
+  m_setStartTime = true;
+  m_submitted_eos = false;
   m_last_pts      = DVD_NOPTS_VALUE;
 
-  CLog::Log(LOGDEBUG, "COMXAudio::Initialize Ouput bps %d samplerate %d channels %d buffer size %d bytes per second %d", 
-      (int)m_pcm_output.nBitPerSample, (int)m_pcm_output.nSamplingRate, (int)m_pcm_output.nChannels, m_BufferLen, m_BytesPerSec);
   CLog::Log(LOGDEBUG, "COMXAudio::Initialize Input bps %d samplerate %d channels %d buffer size %d bytes per second %d", 
       (int)m_pcm_input.nBitPerSample, (int)m_pcm_input.nSamplingRate, (int)m_pcm_input.nChannels, m_BufferLen, m_BytesPerSec);
+  PrintPCM(&m_pcm_output, std::string("input"));
   CLog::Log(LOGDEBUG, "COMXAudio::Initialize device %s passthrough %d hwdecode %d", 
       device.c_str(), m_Passthrough, m_HWDecode);
 
@@ -614,6 +639,7 @@ void COMXAudio::Flush()
   
   m_last_pts      = DVD_NOPTS_VALUE;
   m_LostSync      = true;
+  m_setStartTime  = true;
 }
 
 //***********************************************************************************************
@@ -834,7 +860,7 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
 
     uint64_t val  = (uint64_t)(pts == DVD_NOPTS_VALUE) ? 0 : pts;
 
-    if(m_av_clock->AudioStart())
+    if(m_setStartTime)
     {
       omx_buffer->nFlags = OMX_BUFFERFLAG_STARTTIME;
       if(pts == DVD_NOPTS_VALUE)
@@ -843,7 +869,7 @@ unsigned int COMXAudio::AddPackets(const void* data, unsigned int len, double dt
       m_last_pts = pts;
 
       CLog::Log(LOGDEBUG, "COMXAudio::Decode ADec : setStartTime %f\n", (float)val / DVD_TIME_BASE);
-      m_av_clock->AudioStart(false);
+      m_setStartTime = false;
     }
     else
     {
@@ -992,6 +1018,8 @@ void COMXAudio::SubmitEOS()
   if(!m_Initialized)
     return;
 
+  m_submitted_eos = true;
+
   OMX_ERRORTYPE omx_err = OMX_ErrorNone;
   OMX_BUFFERHEADERTYPE *omx_buffer = m_omx_decoder.GetInputBuffer();
 
@@ -1013,6 +1041,7 @@ void COMXAudio::SubmitEOS()
     CLog::Log(LOGERROR, "%s::%s - OMX_EmptyThisBuffer() failed with result(0x%x)\n", CLASSNAME, __func__, omx_err);
     return;
   }
+  CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__);
 }
 
 bool COMXAudio::IsEOS()
@@ -1021,7 +1050,16 @@ bool COMXAudio::IsEOS()
     return true;
   unsigned int latency = GetAudioRenderingLatency();
   CSingleLock lock (m_critSection);
-  return m_omx_decoder.IsEOS() && latency <= 0;
+
+  if (!(m_omx_decoder.IsEOS() && latency == 0))
+    return false;
+
+  if (m_submitted_eos)
+  {
+    CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__);
+    m_submitted_eos = false;
+  }
+  return true;
 }
 
 void COMXAudio::SwitchChannels(int iAudioStream, bool bAudioOnAllSpeakers)
@@ -1049,17 +1087,17 @@ void COMXAudio::SetCodingType(AEDataFormat dataFormat)
   } 
 }
 
-bool COMXAudio::CanHWDecode(CodecID codec)
+bool COMXAudio::CanHWDecode(AVCodecID codec)
 {
   bool ret = false;
   switch(codec)
   { 
-    case CODEC_ID_DTS:
+    case AV_CODEC_ID_DTS:
       CLog::Log(LOGDEBUG, "COMXAudio::CanHWDecode OMX_AUDIO_CodingDTS\n");
       ret = true;
       break;
-    case CODEC_ID_AC3:
-    case CODEC_ID_EAC3:
+    case AV_CODEC_ID_AC3:
+    case AV_CODEC_ID_EAC3:
       CLog::Log(LOGDEBUG, "COMXAudio::CanHWDecode OMX_AUDIO_CodingDDP\n");
       ret = true;
       break;
index 0b59873..e32a69c 100644 (file)
@@ -41,7 +41,7 @@
 
 #include "threads/CriticalSection.h"
 
-#define AUDIO_BUFFER_SECONDS 2
+#define AUDIO_BUFFER_SECONDS 3
 #define VIS_PACKET_SIZE 512
 
 #define OMX_IS_RAW(x)       \
@@ -83,7 +83,7 @@ public:
   void Process();
 
   void SetCodingType(AEDataFormat dataFormat);
-  static bool CanHWDecode(CodecID codec);
+  static bool CanHWDecode(AVCodecID codec);
 
   static void PrintChannels(OMX_AUDIO_CHANNELTYPE eChannelMapping[]);
   void PrintPCM(OMX_AUDIO_PARAM_PCMMODETYPE *pcm, std::string direction);
@@ -110,6 +110,7 @@ private:
   COMXCoreComponent *m_omx_clock;
   OMXClock       *m_av_clock;
   bool          m_settings_changed;
+  bool          m_setStartTime;
   bool          m_LostSync;
   int           m_SampleRate;
   OMX_AUDIO_CODINGTYPE m_eEncoding;
@@ -123,6 +124,7 @@ private:
   int           m_vizRemapBufferSize;
   uint8_t       *m_vizRemapBuffer;
   CAERemap      m_vizRemap;
+  bool          m_submitted_eos;
 
   OMX_AUDIO_PARAM_PCMMODETYPE m_pcm_output;
   OMX_AUDIO_PARAM_PCMMODETYPE m_pcm_input;
index 882c660..70a2405 100644 (file)
@@ -493,13 +493,6 @@ bool COMXPlayer::OpenFile(const CFileItem &file, const CPlayerOptions &options)
     if(IsRunning())
       CloseFile();
 
-    if(!m_av_clock.OMXInitialize(&m_clock, false, false))
-    {
-      return false;
-    }
-    if(CSettings::Get().GetBool("videoplayer.adjustrefreshrate"))
-      m_av_clock.HDMIClockSync();
-
     m_bAbortRequest = false;
 
     SetPlaySpeed(DVD_PLAYSPEED_NORMAL);
@@ -986,6 +979,7 @@ void COMXPlayer::Process()
   bool bOmxWaitVideo = false;
   bool bOmxWaitAudio = false;
   bool bOmxSentEOFs = false;
+  float m_threshold = 0.2f;
 
   if (!OpenInputStream())
   {
@@ -1015,6 +1009,19 @@ void COMXPlayer::Process()
   // allow renderer to switch to fullscreen if requested
   m_omxPlayerVideo.EnableFullscreen(m_PlayerOptions.fullscreen);
 
+  if(!m_av_clock.OMXInitialize(&m_clock, false, false))
+  {
+    m_bAbortRequest = true;
+    return;
+  }
+  if(CSettings::Get().GetBool("videoplayer.adjustrefreshrate"))
+    m_av_clock.HDMIClockSync();
+  m_av_clock.OMXStateIdle();
+  m_av_clock.OMXStop();
+  m_av_clock.HasAudio(m_HasVideo);
+  m_av_clock.HasVideo(m_HasAudio);
+  m_av_clock.OMXPause();
+
   OpenDefaultStreams();
 
   // look for any EDL files
@@ -1102,22 +1109,94 @@ void COMXPlayer::Process()
 
   while (!m_bAbortRequest)
   {
+    const bool m_Pause = m_playSpeed == DVD_PLAYSPEED_PAUSE;
+    const bool not_accepts_data = (!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) ||
+        (!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0);
+    /* when the video/audio fifos are low, we pause clock, when high we resume */
+    double stamp = m_av_clock.OMXMediaTime();
+    double audio_pts = floor(m_omxPlayerAudio.GetCurrentPts());
+    double video_pts = floor(m_omxPlayerVideo.GetCurrentPts());
+
+    float audio_fifo = audio_pts / DVD_TIME_BASE - stamp * 1e-6;
+    float video_fifo = video_pts / DVD_TIME_BASE - stamp * 1e-6;
+    float threshold = 0.1f;
+    bool audio_fifo_low = false, video_fifo_low = false, audio_fifo_high = false, video_fifo_high = false;
+
     #ifdef _DEBUG
-    char response[80];
     static unsigned count;
     if ((count++ & 15) == 0)
     {
-      vc_gencmd(response, sizeof response, "render_bar 4 video_fifo %d %d %d %d",
-            m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace(),
-            0 , 0, m_omxPlayerVideo.GetDecoderBufferSize());
-      vc_gencmd(response, sizeof response, "render_bar 5 audio_fifo %d %d %d %d",
-            (int)(100.0*m_omxPlayerAudio.GetDelay()), 0, 0, 100*AUDIO_BUFFER_SECONDS);
+      char response[80];
+      if (m_omxPlayerVideo.GetDecoderBufferSize() && m_omxPlayerAudio.GetCacheTotal())
+        vc_gencmd(response, sizeof response, "render_bar 4 video_fifo %d %d %d %d",
+            (int)(100.0*(m_omxPlayerVideo.GetDecoderBufferSize()-m_omxPlayerVideo.GetDecoderFreeSpace())/m_omxPlayerVideo.GetDecoderBufferSize()),
+            (int)(100.0*video_fifo/m_omxPlayerAudio.GetCacheTotal()),
+            0, 100);
+      if (m_omxPlayerAudio.GetCacheTotal())
+        vc_gencmd(response, sizeof response, "render_bar 5 audio_fifo %d %d %d %d",
+            (int)(100.0*audio_fifo/m_omxPlayerAudio.GetCacheTotal()),
+            (int)(100.0*m_omxPlayerAudio.GetDelay()/m_omxPlayerAudio.GetCacheTotal()),
+            0, 100);
       vc_gencmd(response, sizeof response, "render_bar 6 video_queue %d %d %d %d",
             m_omxPlayerVideo.GetLevel(), 0, 0, 100);
       vc_gencmd(response, sizeof response, "render_bar 7 audio_queue %d %d %d %d",
             m_omxPlayerAudio.GetLevel(), 0, 0, 100);
     }
     #endif
+    if (audio_pts != DVD_NOPTS_VALUE)
+    {
+      audio_fifo_low = m_HasAudio && audio_fifo < threshold;
+      audio_fifo_high = audio_pts != DVD_NOPTS_VALUE && audio_fifo >= m_threshold;
+    }
+    if (video_pts != DVD_NOPTS_VALUE)
+    {
+      video_fifo_low = m_HasVideo && video_fifo < threshold;
+      video_fifo_high = video_pts != DVD_NOPTS_VALUE && video_fifo >= m_threshold;
+    }
+    if (!m_HasAudio && m_HasVideo)
+      audio_fifo_high = true;
+    if (!m_HasVideo && m_HasAudio)
+      video_fifo_high = true;
+
+    #ifdef _DEBUG
+    CLog::Log(LOGDEBUG, "%s - M:%.6f-%.6f (A:%.6f V:%.6f) PEF:%d%d%d S:%.2f A:%.2f V:%.2f/T:%.2f (A:%d%d V:%d%d) A:%d%% V:%d%% (%.2f,%.2f)", __FUNCTION__,
+      stamp*1e-6, m_av_clock.OMXClockAdjustment()*1e-6, audio_pts*1e-6, video_pts*1e-6, m_av_clock.OMXIsPaused(), bOmxSentEOFs, not_accepts_data, m_playSpeed * (1.0f/DVD_PLAYSPEED_NORMAL),
+      audio_pts == DVD_NOPTS_VALUE ? 0.0:audio_fifo, video_pts == DVD_NOPTS_VALUE ? 0.0:video_fifo, m_threshold,
+      audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high,
+      m_omxPlayerAudio.GetLevel(), m_omxPlayerVideo.GetLevel(), m_omxPlayerAudio.GetDelay(), (float)m_omxPlayerAudio.GetCacheTotal());
+    #endif
+
+    if (not_accepts_data && (audio_fifo_low || video_fifo_low))
+    {
+      CLog::Log(LOGDEBUG, "%s - Flush! M:%.6f-%.6f (A:%.6f V:%.6f) PEF:%d%d%d S:%.2f A:%.2f V:%.2f/T:%.2f (A:%d%d V:%d%d) A:%d%% V:%d%% (%.2f,%.2f)", __FUNCTION__,
+        stamp*1e-6, m_av_clock.OMXClockAdjustment()*1e-6, audio_pts*1e-6, video_pts*1e-6, m_av_clock.OMXIsPaused(), bOmxSentEOFs, not_accepts_data, m_playSpeed * (1.0f/DVD_PLAYSPEED_NORMAL),
+        audio_pts == DVD_NOPTS_VALUE ? 0.0:audio_fifo, video_pts == DVD_NOPTS_VALUE ? 0.0:video_fifo, m_threshold,
+        audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high,
+        m_omxPlayerAudio.GetLevel(), m_omxPlayerVideo.GetLevel(), m_omxPlayerAudio.GetDelay(), (float)m_omxPlayerAudio.GetCacheTotal());
+      FlushBuffers(false);
+    }
+    else if(!m_Pause && (bOmxSentEOFs || not_accepts_data || (audio_fifo_high && video_fifo_high)))
+    {
+      if (m_av_clock.OMXIsPaused())
+      {
+        CLog::Log(LOGDEBUG, "Resume %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo,
+          audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold);
+        m_av_clock.OMXStateExecute();
+        m_av_clock.OMXResume();
+      }
+    }
+    else if (m_Pause || audio_fifo_low || video_fifo_low)
+    {
+      if (!m_av_clock.OMXIsPaused())
+      {
+        if (!m_Pause)
+          m_threshold = std::min(2.0f*m_threshold, 16.0f);
+        CLog::Log(LOGDEBUG, "Pause %.2f,%.2f (A:%d%d V:%d%d) EOF:%d FULL:%d T:%.2f\n", audio_fifo, video_fifo,
+          audio_fifo_low, audio_fifo_high, video_fifo_low, video_fifo_high, bOmxSentEOFs, not_accepts_data, m_threshold);
+        m_av_clock.OMXPause();
+      }
+    }
+
     // handle messages send to this thread, like seek or demuxer reset requests
     HandleMessages();
 
@@ -1332,8 +1411,8 @@ void COMXPlayer::Process()
 
     if(m_change_volume && m_CurrentAudio.started)
     {
-      m_omxPlayerAudio.SetCurrentVolume(m_current_mute ? VOLUME_MINIMUM : m_current_volume);
-      m_change_volume = false;
+      if(m_omxPlayerAudio.SetCurrentVolume(m_current_mute ? VOLUME_MINIMUM : m_current_volume))
+        m_change_volume = false;
     }
 
     // process the packet
@@ -2442,6 +2521,14 @@ void COMXPlayer::HandleMessages()
           m_CurrentAudio.started = true;
         if(player == DVDPLAYER_VIDEO)
           m_CurrentVideo.started = true;
+
+        if ((player == DVDPLAYER_AUDIO || player == DVDPLAYER_VIDEO) && (!m_HasAudio || m_CurrentAudio.started) && (!m_HasVideo || m_CurrentVideo.started))
+        {
+          m_av_clock.HasAudio(m_HasAudio);
+          m_av_clock.HasVideo(m_HasVideo);
+          m_av_clock.OMXReset();
+        }
+
         CLog::Log(LOGDEBUG, "COMXPlayer::HandleMessages - player started %d", player);
       }
       else if (pMsg->IsType(CDVDMsg::PLAYER_DISPLAYTIME))
@@ -3332,6 +3419,9 @@ void COMXPlayer::FlushBuffers(bool queued, double pts, bool accurate)
 
   CLog::Log(LOGNOTICE, "FlushBuffers: q:%d pts:%.0f a:%d", queued, pts, accurate);
 
+  m_av_clock.OMXStop();
+  m_av_clock.OMXPause();
+
   if(accurate)
     startpts = pts;
   else
@@ -3884,7 +3974,7 @@ bool COMXPlayer::HasMenu()
 
 bool COMXPlayer::GetCurrentSubtitle(CStdString& strSubtitle)
 {
-  double pts = m_av_clock.OMXMediaTime(false);
+  double pts = m_av_clock.OMXMediaTime();
 
   if (m_pInputStream && m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD))
     return false;
index c6ba9c6..d0b6b9c 100644 (file)
@@ -41,6 +41,7 @@
 #include "utils/TimeUtils.h"
 
 #include "OMXPlayer.h"
+#include "linux/RBP.h"
 
 #include <iostream>
 #include <sstream>
@@ -71,14 +72,16 @@ OMXPlayerAudio::OMXPlayerAudio(OMXClock *av_clock, CDVDMessageQueue& parent)
   m_speed         = DVD_PLAYSPEED_NORMAL;
   m_started       = false;
   m_stalled       = false;
-  m_audioClock    = 0;
+  m_audioClock    = DVD_NOPTS_VALUE;
   m_buffer_empty  = false;
   m_nChannels     = 0;
   m_DecoderOpen   = false;
   m_bad_state     = false;
   m_hints_current.Clear();
 
-  m_messageQueue.SetMaxDataSize(3 * 1024 * 1024);
+  bool small_mem = g_RBP.GetArmMem() < 256;
+  m_messageQueue.SetMaxDataSize((small_mem ? 3:6) * 1024 * 1024);
+
   m_messageQueue.SetMaxTimeSize(8.0);
   m_use_passthrough = false;
   m_passthrough = false;
@@ -136,7 +139,7 @@ void OMXPlayerAudio::OpenStream(CDVDStreamInfo &hints, COMXAudioCodecOMX *codec)
     m_hints.bitspersample = 16;
 
   m_speed           = DVD_PLAYSPEED_NORMAL;
-  m_audioClock      = 0;
+  m_audioClock      = DVD_NOPTS_VALUE;
   m_hw_decode       = false;
   m_silence         = false;
   m_started         = false;
@@ -194,8 +197,8 @@ bool OMXPlayerAudio::CodecChange()
     m_hints.samplerate = m_pAudioCodec->GetSampleRate();
   }
 
-  /* only check bitrate changes on CODEC_ID_DTS, CODEC_ID_AC3, CODEC_ID_EAC3 */
-  if(m_hints.codec != CODEC_ID_DTS && m_hints.codec != CODEC_ID_AC3 && m_hints.codec != CODEC_ID_EAC3)
+  /* only check bitrate changes on AV_CODEC_ID_DTS, AV_CODEC_ID_AC3, AV_CODEC_ID_EAC3 */
+  if(m_hints.codec != AV_CODEC_ID_DTS && m_hints.codec != AV_CODEC_ID_AC3 && m_hints.codec != AV_CODEC_ID_EAC3)
     new_bitrate = old_bitrate = 0;
     
   if(m_hints_current.codec          != m_hints.codec ||
@@ -325,16 +328,6 @@ bool OMXPlayerAudio::Decode(DemuxPacket *pkt, bool bDropPacket)
   if(bDropPacket)
     m_stalled = false;
 
-  if(m_omxAudio.GetCacheTime() < 0.1 /*&& min(99,m_messageQueue.GetLevel() + MathUtils::round_int(100.0/8.0*GetCacheTime())) > 10*/)
-  {
-    m_stalled = true;
-    if(!m_av_clock->OMXAudioBuffer() && m_av_clock->HasVideo() && m_speed == DVD_PLAYSPEED_NORMAL)
-    {
-      clock_gettime(CLOCK_REALTIME, &m_starttime);
-      m_av_clock->OMXAudioBufferStart();
-    }
-  }
-
   // signal to our parent that we have initialized
   if(m_started == false)
   {
@@ -380,23 +373,13 @@ void OMXPlayerAudio::Process()
       #endif
       if(Decode(pPacket, m_speed > DVD_PLAYSPEED_NORMAL || m_speed < 0 || bPacketDrop))
       {
-        if (m_stalled && (m_omxAudio.GetCacheTime() > (AUDIO_BUFFER_SECONDS * 0.75f)))
+        // we are not running until something is cached in output device
+        if(m_stalled && m_omxAudio.GetCacheTime() > 0.0)
         {
           CLog::Log(LOGINFO, "COMXPlayerAudio - Switching to normal playback");
           m_stalled = false;
-          if(m_av_clock->HasVideo() && m_av_clock->OMXAudioBuffer())
-            m_av_clock->OMXAudioBufferStop();
         }
       }
-      // hard unlock audio out buffering
-      clock_gettime(CLOCK_REALTIME, &m_endtime);
-      //int iLevel = min(99,m_messageQueue.GetLevel() + MathUtils::round_int(100.0/8.0*GetCacheTime()));
-      if(/*iLevel < 10 &&*/ m_stalled && m_av_clock->OMXAudioBuffer() && (m_endtime.tv_sec - m_starttime.tv_sec) > 1)
-      {
-        m_stalled = false;
-        if(m_av_clock->HasVideo() && m_av_clock->OMXAudioBuffer())
-          m_av_clock->OMXAudioBufferStop();
-      }
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_SYNCHRONIZE))
     {
@@ -410,32 +393,27 @@ void OMXPlayerAudio::Process()
       CDVDMsgGeneralResync* pMsgGeneralResync = (CDVDMsgGeneralResync*)pMsg;
       CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_RESYNC(%f, %d)", m_audioClock, pMsgGeneralResync->m_clock);
       m_flush = false;
+      m_audioClock = DVD_NOPTS_VALUE;
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_RESET))
     {
       CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_RESET");
       if (m_pAudioCodec)
         m_pAudioCodec->Reset();
-      m_av_clock->Lock();
-      m_av_clock->OMXStop(false);
       m_omxAudio.Flush();
-      m_av_clock->OMXReset(false);
-      m_av_clock->UnLock();
       m_started = false;
+      m_audioClock = DVD_NOPTS_VALUE;
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH))
     {
       CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_FLUSH");
-      m_av_clock->Lock();
-      m_av_clock->OMXStop(false);
       m_omxAudio.Flush();
-      m_av_clock->OMXReset(false);
-      m_av_clock->UnLock();
       m_stalled   = true;
       m_started   = false;
 
       if (m_pAudioCodec)
         m_pAudioCodec->Reset();
+      m_audioClock = DVD_NOPTS_VALUE;
     }
     else if (pMsg->IsType(CDVDMsg::PLAYER_STARTED))
     {
@@ -448,7 +426,7 @@ void OMXPlayerAudio::Process()
       COMXPlayer::SPlayerState& state = ((CDVDMsgType<COMXPlayer::SPlayerState>*)pMsg)->m_value;
 
       if(state.time_src == COMXPlayer::ETIMESOURCE_CLOCK)
-        state.time      = DVD_TIME_TO_MSEC(m_av_clock->OMXMediaTime(true));
+        state.time      = DVD_TIME_TO_MSEC(m_av_clock->OMXMediaTime());
         //state.time      = DVD_TIME_TO_MSEC(m_av_clock->GetClock(state.timestamp) + state.time_offset);
       else
         state.timestamp = m_av_clock->GetAbsoluteClock();
@@ -462,18 +440,8 @@ void OMXPlayerAudio::Process()
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_DELAY))
     {
-      if (m_speed != DVD_PLAYSPEED_PAUSE)
-      {
-        double timeout = static_cast<CDVDMsgDouble*>(pMsg)->m_value;
-
-        CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_DELAY(%f)", timeout);
-
-        timeout *= (double)DVD_PLAYSPEED_NORMAL / abs(m_speed);
-        timeout += m_av_clock->GetAbsoluteClock();
-
-        while(!m_bStop && m_av_clock->GetAbsoluteClock() < timeout)
-          Sleep(1);
-      }
+      double timeout = static_cast<CDVDMsgDouble*>(pMsg)->m_value;
+      CLog::Log(LOGDEBUG, "COMXPlayerAudio - CDVDMsg::GENERAL_DELAY(%f)", timeout);
     }
     else if (pMsg->IsType(CDVDMsg::PLAYER_SETSPEED))
     {
@@ -545,12 +513,12 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints)
   /* pathrought is overriding hw decode*/
   if(AUDIO_IS_BITSTREAM(CSettings::Get().GetInt("audiooutput.mode")) && m_use_passthrough)
   {
-    if(hints.codec == CODEC_ID_AC3 && CSettings::Get().GetBool("audiooutput.ac3passthrough") && hdmi_passthrough_ac3)
+    if(hints.codec == AV_CODEC_ID_AC3 && CSettings::Get().GetBool("audiooutput.ac3passthrough") && hdmi_passthrough_ac3)
     {
       dataFormat = AE_FMT_AC3;
       m_passthrough = true;
     }
-    if(hints.codec == CODEC_ID_DTS && CSettings::Get().GetBool("audiooutput.dtspassthrough") && hdmi_passthrough_dts)
+    if(hints.codec == AV_CODEC_ID_DTS && CSettings::Get().GetBool("audiooutput.dtspassthrough") && hdmi_passthrough_dts)
     {
       dataFormat = AE_FMT_DTS;
       m_passthrough = true;
@@ -560,12 +528,12 @@ AEDataFormat OMXPlayerAudio::GetDataFormat(CDVDStreamInfo hints)
   /* hw decode */
   if(m_use_hw_decode && !m_passthrough)
   {
-    if(hints.codec == CODEC_ID_AC3 && COMXAudio::CanHWDecode(m_hints.codec))
+    if(hints.codec == AV_CODEC_ID_AC3 && COMXAudio::CanHWDecode(m_hints.codec))
     {
       dataFormat = AE_FMT_AC3;
       m_hw_decode = true;
     }
-    if(hints.codec == CODEC_ID_DTS && COMXAudio::CanHWDecode(m_hints.codec))
+    if(hints.codec == AV_CODEC_ID_DTS && COMXAudio::CanHWDecode(m_hints.codec))
     {
       dataFormat = AE_FMT_DTS;
       m_hw_decode = true;
@@ -590,14 +558,11 @@ bool OMXPlayerAudio::OpenDecoder()
   m_passthrough = false;
   m_hw_decode   = false;
 
-  bool bSendParent = false;
-
   if(m_DecoderOpen)
   {
     WaitCompletion();
     m_omxAudio.Deinitialize();
     m_DecoderOpen = false;
-    bSendParent = true;
   }
 
   /* setup audi format for audio render */
@@ -613,9 +578,6 @@ bool OMXPlayerAudio::OpenDecoder()
   else
     device = "local";
 
-  m_av_clock->Lock();
-  m_av_clock->OMXStop(false);
-
   bool bAudioRenderOpen = m_omxAudio.Initialize(m_format, device, m_av_clock, m_hints, m_passthrough, m_hw_decode);
 
   m_codec_name = "";
@@ -632,31 +594,14 @@ bool OMXPlayerAudio::OpenDecoder()
       m_codec_name.c_str(), m_nChannels, m_hints.samplerate, m_hints.bitspersample);
   }
 
-  m_av_clock->OMXStateExecute(false);
-  m_av_clock->HasAudio(bAudioRenderOpen);
-  m_av_clock->OMXReset(false);
-  m_av_clock->UnLock();
-
   m_started = false;
 
-  // TODO : Send FLUSH to parent, only if we had a valid open codec. 
-  // this is just a workaround to get the omx video decoder happy again
-  // This situation happens, for example where we have in the stream an audio codec change
-  if(bSendParent)
-    m_messageParent.Put(new CDVDMsg(CDVDMsg::GENERAL_FLUSH));
-
   return bAudioRenderOpen;
 }
 
 void OMXPlayerAudio::CloseDecoder()
 {
-  m_av_clock->Lock();
-  m_av_clock->OMXStop(false);
   m_omxAudio.Deinitialize();
-  m_av_clock->HasAudio(false);
-  m_av_clock->OMXReset(false);
-  m_av_clock->UnLock();
-
   m_DecoderOpen = false;
 }
 
@@ -717,9 +662,9 @@ void OMXPlayerAudio::UnRegisterAudioCallback()
   m_omxAudio.UnRegisterAudioCallback();
 }
 
-void OMXPlayerAudio::SetCurrentVolume(float fVolume)
+bool OMXPlayerAudio::SetCurrentVolume(float fVolume)
 {
-  m_omxAudio.SetCurrentVolume(fVolume);
+  return m_omxAudio.SetCurrentVolume(fVolume);
 }
 
 void OMXPlayerAudio::SetSpeed(int speed)
index 87c6023..02d435a 100644 (file)
@@ -66,7 +66,6 @@ protected:
 
   BitstreamStats            m_audioStats;
 
-  struct timespec           m_starttime, m_endtime;
   bool                      m_buffer_empty;
   bool                      m_flush;
   int                       m_nChannels;
@@ -109,7 +108,7 @@ public:
   void SubmitEOS();
   void  RegisterAudioCallback(IAudioCallback* pCallback);
   void  UnRegisterAudioCallback();
-  void SetCurrentVolume(float fVolume);
+  bool SetCurrentVolume(float fVolume);
   void SetSpeed(int iSpeed);
   int  GetAudioBitrate();
   std::string GetPlayerInfo();
index bb5c74e..6c8c1d8 100644 (file)
@@ -48,6 +48,7 @@
 #include "guilib/GraphicContext.h"
 
 #include "OMXPlayer.h"
+#include "linux/RBP.h"
 
 class COMXMsgVideoCodecChange : public CDVDMsg
 {
@@ -88,14 +89,17 @@ OMXPlayerVideo::OMXPlayerVideo(OMXClock *av_clock,
   m_iCurrentPts           = DVD_NOPTS_VALUE;
   m_iVideoDelay           = 0;
   m_fForcedAspectRatio    = 0.0f;
-  m_messageQueue.SetMaxDataSize(10 * 1024 * 1024);
+  bool small_mem = g_RBP.GetArmMem() < 256;
+  m_messageQueue.SetMaxDataSize((small_mem ? 10:40) * 1024 * 1024);
   m_messageQueue.SetMaxTimeSize(8.0);
 
   m_dst_rect.SetRect(0, 0, 0, 0);
-  m_nextOverlay = DVD_NOPTS_VALUE;
   m_started = false;
+  m_iCurrentPts = DVD_NOPTS_VALUE;
+  m_nextOverlay = DVD_NOPTS_VALUE;
   m_flush = false;
   m_view_mode = 0;
+  m_history_valid_pts = 0;
 }
 
 OMXPlayerVideo::~OMXPlayerVideo()
@@ -134,6 +138,8 @@ bool OMXPlayerVideo::OpenStream(CDVDStreamInfo &hints)
   }
 
   m_open        = true;
+  m_iCurrentPts = DVD_NOPTS_VALUE;
+  m_nextOverlay = DVD_NOPTS_VALUE;
 
   return true;
 }
@@ -160,12 +166,7 @@ bool OMXPlayerVideo::CloseStream(bool bWaitForBuffers)
   m_speed         = DVD_PLAYSPEED_NORMAL;
   m_started       = false;
 
-  m_av_clock->Lock();
-  m_av_clock->OMXStop(false);
   m_omxVideo.Close();
-  m_av_clock->HasVideo(false);
-  m_av_clock->OMXReset(false);
-  m_av_clock->UnLock();
 
   if(m_DllBcmHost.IsLoaded())
     m_DllBcmHost.Unload();
@@ -175,8 +176,6 @@ bool OMXPlayerVideo::CloseStream(bool bWaitForBuffers)
 
 void OMXPlayerVideo::OnStartup()
 {
-  m_iCurrentPts = DVD_NOPTS_VALUE;
-  m_nextOverlay = DVD_NOPTS_VALUE;
 }
 
 void OMXPlayerVideo::OnExit()
@@ -265,14 +264,12 @@ void OMXPlayerVideo::Output(double pts, bool bDropPacket)
     return;
   }
 
-  m_iCurrentPts = pts;
-
   if (CThread::m_bStop)
     return;
 
   // we aim to submit subtitles 100ms early
   const double preroll = DVD_MSEC_TO_TIME(100);
-  double media_pts = m_av_clock->OMXMediaTime(false);
+  double media_pts = m_av_clock->OMXMediaTime();
 
   if (m_nextOverlay != DVD_NOPTS_VALUE && media_pts + preroll <= m_nextOverlay)
     return;
@@ -295,9 +292,16 @@ void OMXPlayerVideo::Output(double pts, bool bDropPacket)
   g_renderManager.FlipPage(CThread::m_bStop, time/DVD_TIME_BASE);
 }
 
+static unsigned count_bits(int32_t value)
+{
+  unsigned bits = 0;
+  for(;value;++bits)
+    value &= value - 1;
+  return bits;
+}
+
 void OMXPlayerVideo::Process()
 {
-  double pts = 0;
   double frametime = (double)DVD_TIME_BASE / m_fFrameRate;
   bool bRequestDrop = false;
 
@@ -337,28 +341,16 @@ void OMXPlayerVideo::Process()
     else if (pMsg->IsType(CDVDMsg::GENERAL_RESYNC))
     {
       CDVDMsgGeneralResync* pMsgGeneralResync = (CDVDMsgGeneralResync*)pMsg;
-
-      if(pMsgGeneralResync->m_timestamp != DVD_NOPTS_VALUE)
-        pts = pMsgGeneralResync->m_timestamp;
-
-      CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_RESYNC(%f, %d)", pts, pMsgGeneralResync->m_clock);
+      CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_RESYNC(%f, %d)", pMsgGeneralResync->m_timestamp, pMsgGeneralResync->m_clock);
+      m_nextOverlay = DVD_NOPTS_VALUE;
+      m_iCurrentPts = DVD_NOPTS_VALUE;
       pMsgGeneralResync->Release();
       continue;
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_DELAY))
     {
-      if (m_speed != DVD_PLAYSPEED_PAUSE)
-      {
-        double timeout = static_cast<CDVDMsgDouble*>(pMsg)->m_value;
-
-        CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_DELAY(%f)", timeout);
-
-        timeout *= (double)DVD_PLAYSPEED_NORMAL / abs(m_speed);
-        timeout += m_av_clock->GetAbsoluteClock();
-
-        while(!m_bStop && m_av_clock->GetAbsoluteClock() < timeout)
-          Sleep(1);
-      }
+      double timeout = static_cast<CDVDMsgDouble*>(pMsg)->m_value;
+      CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_DELAY(%f)", timeout);
     }
     else if (pMsg->IsType(CDVDMsg::VIDEO_SET_ASPECT))
     {
@@ -368,13 +360,10 @@ void OMXPlayerVideo::Process()
     else if (pMsg->IsType(CDVDMsg::GENERAL_RESET))
     {
       CLog::Log(LOGDEBUG, "COMXPlayerVideo - CDVDMsg::GENERAL_RESET");
-      m_av_clock->Lock();
-      m_av_clock->OMXStop(false);
       m_omxVideo.Reset();
-      m_av_clock->OMXReset(false);
-      m_av_clock->UnLock();
       m_started = false;
       m_nextOverlay = DVD_NOPTS_VALUE;
+      m_iCurrentPts = DVD_NOPTS_VALUE;
     }
     else if (pMsg->IsType(CDVDMsg::GENERAL_FLUSH)) // private message sent by (COMXPlayerVideo::Flush())
     {
@@ -382,11 +371,8 @@ void OMXPlayerVideo::Process()
       m_stalled = true;
       m_started = false;
       m_nextOverlay = DVD_NOPTS_VALUE;
-      m_av_clock->Lock();
-      m_av_clock->OMXStop(false);
+      m_iCurrentPts = DVD_NOPTS_VALUE;
       m_omxVideo.Reset();
-      m_av_clock->OMXReset(false);
-      m_av_clock->UnLock();
       m_flush = false;
     }
     else if (pMsg->IsType(CDVDMsg::PLAYER_SETSPEED))
@@ -408,7 +394,7 @@ void OMXPlayerVideo::Process()
       COMXPlayer::SPlayerState& state = ((CDVDMsgType<COMXPlayer::SPlayerState>*)pMsg)->m_value;
 
       if(state.time_src == COMXPlayer::ETIMESOURCE_CLOCK)
-        state.time      = DVD_TIME_TO_MSEC(m_av_clock->OMXMediaTime(true));
+        state.time      = DVD_TIME_TO_MSEC(m_av_clock->OMXMediaTime());
         //state.time      = DVD_TIME_TO_MSEC(m_av_clock->GetClock(state.timestamp) + state.time_offset);
       else
         state.timestamp = m_av_clock->GetAbsoluteClock();
@@ -465,32 +451,20 @@ void OMXPlayerVideo::Process()
           m_stalled = false;
         }
 
-        double output_pts = 0;
-        // validate picture timing,
-        // if both dts/pts invalid, use pts calulated from picture.iDuration
-        // if pts invalid use dts, else use picture.pts as passed
-        if (pPacket->dts == DVD_NOPTS_VALUE && pPacket->pts == DVD_NOPTS_VALUE)
-          output_pts = pts;
-        else if (pPacket->pts == DVD_NOPTS_VALUE)
-          output_pts = pts;
-        else
-          output_pts = pPacket->pts;
-
-        if(pPacket->pts != DVD_NOPTS_VALUE)
-          pPacket->pts += m_iVideoDelay;
-
-        if(pPacket->dts != DVD_NOPTS_VALUE)
-          pPacket->dts += m_iVideoDelay;
+        // some packed bitstream AVI files set almost all pts values to DVD_NOPTS_VALUE, but have a scattering of real pts values.
+        // the valid pts values match the dts values.
+        // if a stream has had more than 4 valid pts values in the last 16, the use UNKNOWN, otherwise use dts
+        m_history_valid_pts = (m_history_valid_pts << 1) | (pPacket->pts != DVD_NOPTS_VALUE);
+        double pts = pPacket->pts;
+        if(pPacket->pts == DVD_NOPTS_VALUE && count_bits(m_history_valid_pts & 0xffff) < 4)
+          pts = pPacket->dts;
 
-        if(pPacket->duration == 0)
-          pPacket->duration = frametime;
+        if (pts != DVD_NOPTS_VALUE)
+          pts += m_iVideoDelay;
 
-        if(output_pts != DVD_NOPTS_VALUE)
-          pts = output_pts;
-
-        m_omxVideo.Decode(pPacket->pData, pPacket->iSize, pPacket->dts, pPacket->pts);
-
-        Output(output_pts, bRequestDrop);
+        m_omxVideo.Decode(pPacket->pData, pPacket->iSize, pts);
+        Output(pts, bRequestDrop);
+        m_iCurrentPts = pts;
 
         if(m_started == false)
         {
@@ -499,10 +473,6 @@ void OMXPlayerVideo::Process()
           m_messageParent.Put(new CDVDMsgInt(CDVDMsg::PLAYER_STARTED, DVDPLAYER_VIDEO));
         }
 
-        // guess next frame pts. iDuration is always valid
-        if (m_speed != 0)
-          pts += pPacket->duration * m_speed / abs(m_speed);
-
         break;
       }
 
@@ -537,12 +507,11 @@ bool OMXPlayerVideo::OpenDecoder()
     CLog::Log(LOGINFO, "OMXPlayerVideo::OpenDecoder : Invalid framerate %d, using forced 25fps and just trust timestamps\n", (int)m_fFrameRate);
     m_fFrameRate = 25;
   }
-  // use aspect in stream always
-  m_fForcedAspectRatio = m_hints.aspect;
-
-
-  m_av_clock->Lock();
-  m_av_clock->OMXStop(false);
+  // use aspect in stream if available
+  if (m_hints.forced_aspect)
+    m_fForcedAspectRatio = m_hints.aspect;
+  else
+    m_fForcedAspectRatio = 0.0;
 
   bool bVideoDecoderOpen = m_omxVideo.Open(m_hints, m_av_clock, CMediaSettings::Get().GetCurrentVideoSettings().m_DeinterlaceMode, m_hdmi_clock_sync);
   m_omxVideo.RegisterResolutionUpdateCallBack((void *)this, ResolutionUpdateCallBack);
@@ -570,10 +539,8 @@ bool OMXPlayerVideo::OpenDecoder()
     m_av_clock->SetRefreshRate(m_fFrameRate);
   }
 
-  m_av_clock->OMXStateExecute(false);
-  m_av_clock->HasVideo(bVideoDecoderOpen);
-  m_av_clock->OMXReset(false);
-  m_av_clock->UnLock();
+  // start from assuming all recent frames had valid pts
+  m_history_valid_pts = ~0;
 
   return bVideoDecoderOpen;
 }
@@ -688,7 +655,7 @@ void OMXPlayerVideo::RenderUpdateCallBack(const void *ctx, const CRect &SrcRect,
   player->SetVideoRect(SrcRect, DestRect);
 }
 
-void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height)
+void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height, float display_aspect)
 {
   RESOLUTION res  = g_graphicsContext.GetVideoResolution();
   uint32_t video_width   = CDisplaySettings::Get().GetResolutionInfo(res).iScreenWidth;
@@ -726,6 +693,8 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height)
   /* use forced aspect if any */
   if( m_fForcedAspectRatio != 0.0f )
     iDisplayWidth = (int) (iDisplayHeight * m_fForcedAspectRatio);
+  else if( display_aspect != 0.0f )
+    iDisplayWidth = (int) (iDisplayHeight * display_aspect);
 
   CLog::Log(LOGDEBUG,"%s - change configuration. video:%dx%d. framerate: %4.2f. %dx%d format: BYPASS",
       __FUNCTION__, video_width, video_height, m_fFrameRate, iDisplayWidth, iDisplayHeight);
@@ -741,9 +710,9 @@ void OMXPlayerVideo::ResolutionUpdateCallBack(uint32_t width, uint32_t height)
   g_renderManager.RegisterRenderUpdateCallBack((const void*)this, RenderUpdateCallBack);
 }
 
-void OMXPlayerVideo::ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height)
+void OMXPlayerVideo::ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height, float display_aspect)
 {
   OMXPlayerVideo *player = static_cast<OMXPlayerVideo*>(ctx);
-  player->ResolutionUpdateCallBack(width, height);
+  player->ResolutionUpdateCallBack(width, height, display_aspect);
 }
 
index 1891716..2f5d8e4 100644 (file)
@@ -71,6 +71,7 @@ protected:
   CRect                     m_dst_rect;
   int                       m_view_mode;
 
+  uint32_t                  m_history_valid_pts;
   DllBcmHost                m_DllBcmHost;
 
   CDVDOverlayContainer  *m_pOverlayContainer;
@@ -124,7 +125,7 @@ public:
   int GetFreeSpace();
   void  SetVideoRect(const CRect &SrcRect, const CRect &DestRect);
   static void RenderUpdateCallBack(const void *ctx, const CRect &SrcRect, const CRect &DestRect);
-  void ResolutionUpdateCallBack(uint32_t width, uint32_t height);
-  static void ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height);
+  void ResolutionUpdateCallBack(uint32_t width, uint32_t height, float pixel_aspect);
+  static void ResolutionUpdateCallBack(void *ctx, uint32_t width, uint32_t height, float pixel_aspect);
 };
 #endif
index 6b5f743..2b28f6b 100644 (file)
@@ -34,6 +34,8 @@
 #include "settings/Settings.h"
 #include "utils/BitstreamConverter.h"
 
+#include "linux/RBP.h"
+
 #include <sys/time.h>
 #include <inttypes.h>
 
@@ -79,6 +81,7 @@ COMXVideo::COMXVideo() : m_video_codec_name("")
   m_res_ctx           = NULL;
   m_submitted_eos     = false;
   m_settings_changed  = false;
+  m_setStartTime      = false;
   m_transform         = OMX_DISPLAY_ROT0;
 }
 
@@ -124,11 +127,11 @@ bool COMXVideo::SendDecoderConfig()
   return true;
 }
 
-bool COMXVideo::NaluFormatStartCodes(enum CodecID codec, uint8_t *in_extradata, int in_extrasize)
+bool COMXVideo::NaluFormatStartCodes(enum AVCodecID codec, uint8_t *in_extradata, int in_extrasize)
 {
   switch(codec)
   {
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
       if (in_extrasize < 7 || in_extradata == NULL)
         return true;
       // valid avcC atom data always starts with the value 1 (version), otherwise annexb
@@ -156,9 +159,25 @@ bool COMXVideo::PortSettingsChanged()
   {
     CLog::Log(LOGERROR, "%s::%s - error m_omx_decoder.GetParameter(OMX_IndexParamPortDefinition) omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
   }
+
+  OMX_CONFIG_POINTTYPE pixel_aspect;
+  OMX_INIT_STRUCTURE(pixel_aspect);
+  pixel_aspect.nPortIndex = m_omx_decoder.GetOutputPort();
+  omx_err = m_omx_decoder.GetParameter(OMX_IndexParamBrcmPixelAspectRatio, &pixel_aspect);
+  if(omx_err != OMX_ErrorNone)
+  {
+    CLog::Log(LOGERROR, "%s::%s - error m_omx_decoder.GetParameter(OMX_IndexParamBrcmPixelAspectRatio) omx_err(0x%08x)", CLASSNAME, __func__, omx_err);
+  }
+
   // let OMXPlayerVideo know about resolution so it can inform RenderManager
   if (m_res_callback)
-    m_res_callback(m_res_ctx, port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight);
+  {
+    float display_aspect = 0.0f;
+    if (pixel_aspect.nX && pixel_aspect.nY)
+      display_aspect = (float)pixel_aspect.nX * port_image.format.video.nFrameWidth /
+        ((float)pixel_aspect.nY * port_image.format.video.nFrameHeight);
+    m_res_callback(m_res_ctx, port_image.format.video.nFrameWidth, port_image.format.video.nFrameHeight, display_aspect);
+  }
 
   if (m_settings_changed)
   {
@@ -324,6 +343,7 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
   OMX_ERRORTYPE omx_err   = OMX_ErrorNone;
   std::string decoder_name;
   m_settings_changed = false;
+  m_setStartTime = true;
 
   m_res_ctx           = NULL;
   m_res_callback      = NULL;
@@ -349,7 +369,7 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
 
   switch (hints.codec)
   {
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
     {
       switch(hints.profile)
       {
@@ -387,64 +407,64 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
       }
     }
     break;
-    case CODEC_ID_MPEG4:
+    case AV_CODEC_ID_MPEG4:
       // (role name) video_decoder.mpeg4
       // MPEG-4, DivX 4/5 and Xvid compatible
       decoder_name = OMX_MPEG4_DECODER;
       m_codingType = OMX_VIDEO_CodingMPEG4;
       m_video_codec_name = "omx-mpeg4";
       break;
-    case CODEC_ID_MPEG1VIDEO:
-    case CODEC_ID_MPEG2VIDEO:
+    case AV_CODEC_ID_MPEG1VIDEO:
+    case AV_CODEC_ID_MPEG2VIDEO:
       // (role name) video_decoder.mpeg2
       // MPEG-2
       decoder_name = OMX_MPEG2V_DECODER;
       m_codingType = OMX_VIDEO_CodingMPEG2;
       m_video_codec_name = "omx-mpeg2";
       break;
-    case CODEC_ID_H263:
+    case AV_CODEC_ID_H263:
       // (role name) video_decoder.mpeg4
       // MPEG-4, DivX 4/5 and Xvid compatible
       decoder_name = OMX_MPEG4_DECODER;
       m_codingType = OMX_VIDEO_CodingMPEG4;
       m_video_codec_name = "omx-h263";
       break;
-    case CODEC_ID_VP6:
+    case AV_CODEC_ID_VP6:
       // this form is encoded upside down
       vflip = true;
       // fall through
-    case CODEC_ID_VP6F:
-    case CODEC_ID_VP6A:
+    case AV_CODEC_ID_VP6F:
+    case AV_CODEC_ID_VP6A:
       // (role name) video_decoder.vp6
       // VP6
       decoder_name = OMX_VP6_DECODER;
       m_codingType = OMX_VIDEO_CodingVP6;
       m_video_codec_name = "omx-vp6";
     break;
-    case CODEC_ID_VP8:
+    case AV_CODEC_ID_VP8:
       // (role name) video_decoder.vp8
       // VP8
       decoder_name = OMX_VP8_DECODER;
       m_codingType = OMX_VIDEO_CodingVP8;
       m_video_codec_name = "omx-vp8";
     break;
-    case CODEC_ID_THEORA:
+    case AV_CODEC_ID_THEORA:
       // (role name) video_decoder.theora
       // theora
       decoder_name = OMX_THEORA_DECODER;
       m_codingType = OMX_VIDEO_CodingTheora;
       m_video_codec_name = "omx-theora";
     break;
-    case CODEC_ID_MJPEG:
-    case CODEC_ID_MJPEGB:
+    case AV_CODEC_ID_MJPEG:
+    case AV_CODEC_ID_MJPEGB:
       // (role name) video_decoder.mjpg
       // mjpg
       decoder_name = OMX_MJPEG_DECODER;
       m_codingType = OMX_VIDEO_CodingMJPEG;
       m_video_codec_name = "omx-mjpeg";
     break;
-    case CODEC_ID_VC1:
-    case CODEC_ID_WMV3:
+    case AV_CODEC_ID_VC1:
+    case AV_CODEC_ID_WMV3:
       // (role name) video_decoder.vc1
       // VC-1, WMV9
       decoder_name = OMX_VC1_DECODER;
@@ -511,8 +531,8 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
   }
 
   portParam.nPortIndex = m_omx_decoder.GetInputPort();
-  portParam.nBufferCountActual = VIDEO_BUFFERS;
-
+  bool small_mem = g_RBP.GetArmMem() < 256;
+  portParam.nBufferCountActual = small_mem ? VIDEO_BUFFERS:2*VIDEO_BUFFERS;
   portParam.format.video.nFrameWidth  = m_decoded_width;
   portParam.format.video.nFrameHeight = m_decoded_height;
 
@@ -523,6 +543,20 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
     return false;
   }
 
+  // request portsettingschanged on aspect ratio change
+  OMX_CONFIG_REQUESTCALLBACKTYPE notifications;
+  OMX_INIT_STRUCTURE(notifications);
+  notifications.nPortIndex = m_omx_decoder.GetOutputPort();
+  notifications.nIndex = OMX_IndexParamBrcmPixelAspectRatio;
+  notifications.bEnable = OMX_TRUE;
+
+  omx_err = m_omx_decoder.SetParameter((OMX_INDEXTYPE)OMX_IndexConfigRequestCallback, &notifications);
+  if (omx_err != OMX_ErrorNone)
+  {
+    CLog::Log(LOGERROR, "COMXVideo::Open OMX_IndexConfigRequestCallback error (0%08x)\n", omx_err);
+    return false;
+  }
+
   OMX_PARAM_BRCMVIDEODECODEERRORCONCEALMENTTYPE concanParam;
   OMX_INIT_STRUCTURE(concanParam);
   if(g_advancedSettings.m_omxDecodeStartWithValidFrame)
@@ -633,9 +667,6 @@ bool COMXVideo::Open(CDVDStreamInfo &hints, OMXClock *clock, EDEINTERLACEMODE de
     CLASSNAME, __func__, m_omx_decoder.GetComponent(), m_omx_decoder.GetInputPort(), m_omx_decoder.GetOutputPort(),
     m_deinterlace_request, m_hdmi_clock_sync);
 
-  // start from assuming all recent frames had valid pts
-  m_history_valid_pts = ~0;
-
   return true;
 }
 
@@ -693,15 +724,7 @@ unsigned int COMXVideo::GetSize()
   return m_omx_decoder.GetInputBufferSize();
 }
 
-static unsigned count_bits(int32_t value)
-{
-  unsigned bits = 0;
-  for(;value;++bits)
-    value &= value - 1;
-  return bits;
-}
-
-int COMXVideo::Decode(uint8_t *pData, int iSize, double dts, double pts)
+int COMXVideo::Decode(uint8_t *pData, int iSize, double pts)
 {
   OMX_ERRORTYPE omx_err;
 
@@ -725,21 +748,12 @@ int COMXVideo::Decode(uint8_t *pData, int iSize, double dts, double pts)
 
       omx_buffer->nFlags = 0;
       omx_buffer->nOffset = 0;
-      // some packed bitstream AVI files set almost all pts values to DVD_NOPTS_VALUE, but have a scattering of real pts values.
-      // the valid pts values match the dts values.
-      // if a stream has had more than 4 valid pts values in the last 16, the use UNKNOWN, otherwise use dts
-      m_history_valid_pts = (m_history_valid_pts << 1) | (pts != DVD_NOPTS_VALUE);
-      if(pts == DVD_NOPTS_VALUE && count_bits(m_history_valid_pts & 0xffff) < 4)
-        pts = dts;
-
-      if(m_av_clock->VideoStart())
+
+      if(m_setStartTime)
       {
-        // only send dts on first frame to get nearly correct starttime
-        if(pts == DVD_NOPTS_VALUE)
-          pts = dts;
         omx_buffer->nFlags |= OMX_BUFFERFLAG_STARTTIME;
         CLog::Log(LOGDEBUG, "OMXVideo::Decode VDec : setStartTime %f\n", (pts == DVD_NOPTS_VALUE ? 0.0 : pts) / DVD_TIME_BASE);
-        m_av_clock->VideoStart(false);
+        m_setStartTime = false;
       }
       if(pts == DVD_NOPTS_VALUE)
         omx_buffer->nFlags |= OMX_BUFFERFLAG_TIME_UNKNOWN;
@@ -784,6 +798,14 @@ int COMXVideo::Decode(uint8_t *pData, int iSize, double dts, double pts)
           return false;
         }
       }
+      omx_err = m_omx_decoder.WaitForEvent(OMX_EventParamOrConfigChanged, 0);
+      if (omx_err == OMX_ErrorNone)
+      {
+        if(!PortSettingsChanged())
+        {
+          CLog::Log(LOGERROR, "%s::%s - error PortSettingsChanged (EventParamOrConfigChanged) omx_err(0x%08x)\n", CLASSNAME, __func__, omx_err);
+        }
+      }
     }
     return true;
 
@@ -797,6 +819,7 @@ void COMXVideo::Reset(void)
   if(!m_is_open)
     return;
 
+  m_setStartTime = true;
   m_omx_decoder.FlushInput();
   m_omx_tunnel_decoder.Flush();
 }
@@ -865,11 +888,19 @@ void COMXVideo::SubmitEOS()
     CLog::Log(LOGERROR, "%s::%s - OMX_EmptyThisBuffer() failed with result(0x%x)\n", CLASSNAME, __func__, omx_err);
     return;
   }
+  CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__);
 }
 
 bool COMXVideo::IsEOS()
 {
   if(!m_is_open)
     return true;
-  return m_omx_render.IsEOS();
+  if (!m_omx_render.IsEOS())
+    return false;
+  if (m_submitted_eos)
+  {
+    CLog::Log(LOGINFO, "%s::%s", CLASSNAME, __func__);
+    m_submitted_eos = false;
+  }
+  return true;
 }
index fe9f174..6b81405 100644 (file)
@@ -37,7 +37,7 @@
 
 #define CLASSNAME "COMXVideo"
 
-typedef void (*ResolutionUpdateCallBackFn)(void *ctx, uint32_t width, uint32_t height);
+typedef void (*ResolutionUpdateCallBackFn)(void *ctx, uint32_t width, uint32_t height, float display_aspect);
 
 class COMXVideo
 {
@@ -53,7 +53,7 @@ public:
   void Close(void);
   unsigned int GetFreeSpace();
   unsigned int GetSize();
-  int  Decode(uint8_t *pData, int iSize, double dts, double pts);
+  int  Decode(uint8_t *pData, int iSize, double pts);
   void Reset(void);
   void SetDropState(bool bDrop);
   std::string GetDecoderName() { return m_video_codec_name; };
@@ -83,6 +83,7 @@ protected:
   COMXCoreTunel     m_omx_tunnel_sched;
   COMXCoreTunel     m_omx_tunnel_image_fx;
   bool              m_is_open;
+  bool              m_setStartTime;
 
   uint8_t           *m_extradata;
   int               m_extrasize;
@@ -93,13 +94,12 @@ protected:
   bool              m_deinterlace;
   EDEINTERLACEMODE  m_deinterlace_request;
   bool              m_hdmi_clock_sync;
-  uint32_t          m_history_valid_pts;
   ResolutionUpdateCallBackFn m_res_callback;
   void              *m_res_ctx;
   bool              m_submitted_eos;
   OMX_DISPLAYTRANSFORMTYPE m_transform;
   bool              m_settings_changed;
-  static bool NaluFormatStartCodes(enum CodecID codec, uint8_t *in_extradata, int in_extrasize);
+  static bool NaluFormatStartCodes(enum AVCodecID codec, uint8_t *in_extradata, int in_extrasize);
 };
 
 #endif
index edf0eb6..3cf67a3 100644 (file)
@@ -97,7 +97,7 @@ bool DVDPlayerCodec::Init(const CStdString &strFile, unsigned int filecache)
   }
   catch(...)
   {
-    CLog::Log(LOGERROR, "%s: Exception thrown when opeing demuxer", __FUNCTION__);
+    CLog::Log(LOGERROR, "%s: Exception thrown when opening demuxer", __FUNCTION__);
     if (m_pDemuxer)
     {
       delete m_pDemuxer;
index 960c8e3..7c907d0 100644 (file)
 
 #include "utils/StdString.h"
 
+// Reserved 0 - 255
+//  XBIRRemote.h
+//  XINPUT_IR_REMOTE-*
+
 // Analogue - don't change order
 #define KEY_BUTTON_A                        256
 #define KEY_BUTTON_B                        257
index c62aaf1..216d39a 100644 (file)
 #define XINPUT_IR_REMOTE_YELLOW         253
 #define XINPUT_IR_REMOTE_BLUE           254
 #define XINPUT_IR_REMOTE_PLAYLIST       255
-#define XINPUT_IR_REMOTE_GUIDE          256
+#define XINPUT_IR_REMOTE_GUIDE          50
 
 #define XINPUT_IR_REMOTE_LIVE_RADIO     248
 #define XINPUT_IR_REMOTE_EPG_SEARCH     246
 
+// Reserved 256 -> ...
+// Key.h
+// KEY_BUTTON_*
+
 typedef struct _XINPUT_IR_REMOTE
 {
   BYTE wButtons;
index cfaa75d..ff6f086 100644 (file)
@@ -55,11 +55,13 @@ namespace XBMCAddon
     class Keyboard : public AddonClass
     {
     public:
+#ifndef SWIG
       String strDefault;
       String strHeading;
       bool bHidden;
       String strText;
       bool bConfirmed;
+#endif
 
       Keyboard(const String& line = emptyString, const String& heading = emptyString, bool hidden = false);
       virtual ~Keyboard();
index b670294..5b6bc77 100644 (file)
@@ -47,7 +47,9 @@ namespace XBMCAddon
     class ListItem : public AddonClass
     {
     public:
+#ifndef SWIG
       CFileItemPtr item;
+#endif
 
       ListItem(const String& label = emptyString, 
                const String& label2 = emptyString,
index 2ad6c77..d8b2c6e 100644 (file)
@@ -82,7 +82,13 @@ Helper.setup(this,classes,
       (Pattern.compile('''(r.){0,1}XbmcCommons::Buffer''')) : new File('typemaps/python.buffer.intm'),
       (Pattern.compile('''(p.){0,1}std::map<\\(.*\\)>''')) : new File('typemaps/python.map.intm'),
       'bool' : '${api} = (PyInt_AsLong(${slarg}) == 0L ? false : true);',
-      'long' : '${api} = PyInt_AsLong(${slarg});'
+      'long' : '${api} = PyInt_AsLong(${slarg});',
+      'unsigned long' : '${api} = PyLong_AsUnsignedLong(${slarg});',
+      'long long' : '${api} = PyLong_AsLongLong(${slarg});',
+      'unsigned long long' : '${api} = PyLong_AsUnsignedLongLong(${slarg});',
+      'int' : '${api} = (int)PyInt_AsLong(${slarg});',
+      'double' : '${api} = PyFloat_AsDouble(${slarg});',
+      'float' : '${api} = (float)PyFloat_AsDouble(${slarg});'
     ], '${api} = (${swigTypeParser.SwigType_str(ltype)})retrieveApiInstance(${slarg},"${ltype}","${helper.findNamespace(method)}","${helper.callingName(method)}");')
 
 //println 'this: ' + this.binding.getVariables()
@@ -308,6 +314,8 @@ void doClassMethodInfo(Node clazz, List initTypeCalls = null)
 
   List normalMethods = clazz.function.findAll { !it.@name.startsWith("operator ") }
   List operators =  clazz.function.findAll { it.@name.startsWith("operator ") }
+  List properties = clazz.variable.findAll { it.@access != null && it.@access == "public" }
+  List properties_set = properties.findAll { it.@feature_immutable == null || it.@feature_immutable == 0 }
 
   operators.each {
     // we have an operator. The only one we can handle is ==
@@ -398,6 +406,119 @@ void doClassMethodInfo(Node clazz, List initTypeCalls = null)
     {NULL, NULL, 0, NULL}
   };
 
+<%
+  if (properties.size() > 0) {
+%>  static PyObject* ${classNameAsVariable}_getMember(PyHolder *self, void *name)
+  {
+    if (self == NULL)
+      return NULL;
+<%
+    String clazzName = Helper.findFullClassName(properties[0])
+%>
+    try
+    {
+      ${clazzName}* theObj = (${clazzName}*)retrieveApiInstance((PyObject*)self, &Py${classNameAsVariable}_Type, "${classNameAsVariable}_getMember()", "${clazzName}");
+
+      PyObject* result = NULL;
+   <%
+  properties.each {
+%>   if (strcmp((char*)name, "${it.@sym_name}") == 0)
+      {
+        ${SwigTypeParser.SwigType_lstr(it.@type)} apiResult = (${SwigTypeParser.SwigType_lstr(it.@type)})theObj->${it.@sym_name};
+        ${Helper.getOutConversion(it.@type, 'result', it)}
+      }
+      else<%
+  } %>
+      {
+        Py_INCREF(Py_None);
+        return Py_None;
+      }
+
+      return result;
+    }
+    catch (const XBMCAddon::WrongTypeException& e)
+    {
+      CLog::Log(LOGERROR,"EXCEPTION: %s",e.GetMessage());
+      PyErr_SetString(PyExc_TypeError, e.GetMessage());
+      return NULL;
+    }
+    catch (const XbmcCommons::Exception& e)
+    {
+      CLog::Log(LOGERROR,"EXCEPTION: %s",e.GetMessage());
+      PyErr_SetString(PyExc_RuntimeError, e.GetMessage());
+      return NULL;
+    }
+    catch (...)
+    {
+      CLog::Log(LOGERROR,"EXCEPTION: Unknown exception thrown from the call \"${classNameAsVariable}_getMember()\"");
+      PyErr_SetString(PyExc_RuntimeError, "Unknown exception thrown from the call \"${classNameAsVariable}_getMember()\"");
+      return NULL;
+    }
+
+    return NULL;
+  }
+
+<%
+    if (properties_set.size() > 0) {
+%>  int ${classNameAsVariable}_setMember(PyHolder *self, PyObject *value, void *name)
+  {
+    if (self == NULL)
+      return -1;
+
+    ${clazzName}* theObj = NULL;
+    try
+    {
+      theObj = (${clazzName}*)retrieveApiInstance((PyObject*)self, &Py${classNameAsVariable}_Type, "${classNameAsVariable}_getMember()", "${clazzName}");
+    }
+    catch (const XBMCAddon::WrongTypeException& e)
+    {
+      CLog::Log(LOGERROR,"EXCEPTION: %s",e.GetMessage());
+      PyErr_SetString(PyExc_TypeError, e.GetMessage());
+      return NULL;
+    }
+    catch (const XbmcCommons::Exception& e)
+    {
+      CLog::Log(LOGERROR,"EXCEPTION: %s",e.GetMessage());
+      PyErr_SetString(PyExc_RuntimeError, e.GetMessage());
+      return NULL;
+    }
+    catch (...)
+    {
+      CLog::Log(LOGERROR,"EXCEPTION: Unknown exception thrown from the call \"${classNameAsVariable}_getMember()\"");
+      PyErr_SetString(PyExc_RuntimeError, "Unknown exception thrown from the call \"${classNameAsVariable}_getMember()\"");
+      return NULL;
+    }
+
+<%
+  properties_set.each {
+%>   if (strcmp((char*)name, "${it.@sym_name}") == 0)
+      {
+        ${SwigTypeParser.SwigType_lstr(it.@type)} tmp;
+        ${Helper.getInConversion(it.@type, 'tmp', 'value', it)}
+        if (PyErr_Occurred())
+          throw PythonBindings::PythonToCppException();
+        
+        theObj->${it.@sym_name} = tmp;
+      }
+      else<%
+  } %>
+        return -1;
+
+    return 0;
+  } <%
+    }
+%>
+
+  // All of the methods on this class
+  static PyGetSetDef ${classNameAsVariable}_getsets[] = { <%
+    properties.each {  %>
+    {(char*)"${it.@sym_name}", (getter)${classNameAsVariable}_getMember, ${(it.@feature_immutable == null || it.@feature_immutable == 0) ? '(setter)' + classNameAsVariable + '_setMember' : 'NULL'}, (char*)${Helper.hasDoc(it) ? PythonTools.makeDocString(it.doc[0]) : 'NULL'}, (char*)"${it.@sym_name}" }, <% }
+%>
+    {NULL}
+  };
+<%
+  } %>
+
   // This method initializes the above mentioned Python Type structure
   static void ${initTypeCall}()
   {
@@ -423,11 +544,13 @@ void doClassMethodInfo(Node clazz, List initTypeCalls = null)
 
     Py${classNameAsVariable}_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
     Py${classNameAsVariable}_Type.tp_doc = ${Helper.hasDoc(clazz) ? (classNameAsVariable + '__doc__') : 'NULL' };
-    Py${classNameAsVariable}_Type.tp_methods = ${classNameAsVariable}_methods;
+    Py${classNameAsVariable}_Type.tp_methods = ${classNameAsVariable}_methods; <%
+ if (properties.size() > 0) { %>
+    Py${classNameAsVariable}_Type.tp_getset = ${classNameAsVariable}_getsets;
 <%
-    if (doAsMapping)
-    {
-%>    Py${classNameAsVariable}_Type.tp_as_mapping = &${module.@name}_${classNameAsVariable}_as_mapping;
+ }
+ if (doAsMapping) { %>
+    Py${classNameAsVariable}_Type.tp_as_mapping = &${module.@name}_${classNameAsVariable}_as_mapping;
 <%  }
     Node baseclass = PythonTools.findValidBaseClass(clazz, module)
 
index 69361c8..d0e354d 100644 (file)
@@ -269,6 +269,7 @@ void XBPyThread::Process()
   PyEval_AcquireLock();
   PyThreadState_Swap(state);
 
+  bool failed = false;
   if (!stopping)
   {
     try
@@ -313,15 +314,17 @@ void XBPyThread::Process()
     catch (const XbmcCommons::Exception& e)
     {
       e.LogThrowMessage();
+      failed = true;
     }
     catch (...)
     {
       CLog::Log(LOGERROR, "failure in %s", m_source);
+      failed = true;
     }
   }
 
   bool systemExitThrown = false;
-  if (!PyErr_Occurred())
+  if (!failed && !PyErr_Occurred())
     CLog::Log(LOGINFO, "Scriptresult: Success");
   else if (PyErr_ExceptionMatches(PyExc_SystemExit))
   {
@@ -330,8 +333,12 @@ void XBPyThread::Process()
   }
   else
   {
-    PythonBindings::PythonToCppException e;
-    e.LogThrowMessage();
+    // if it failed with an exception we already logged the details
+    if (!failed)
+    {
+      PythonBindings::PythonToCppException e;
+      e.LogThrowMessage();
+    }
 
     {
       CPyThreadState releaseGil;
@@ -364,6 +371,10 @@ void XBPyThread::Process()
     }
   }
 
+  // no need to do anything else because the script has already stopped
+  if (failed)
+    return;
+
   PyObject *m = PyImport_AddModule((char*)"xbmc");
   if(!m || PyObject_SetAttrString(m, (char*)"abortRequested", PyBool_FromLong(1)))
     CLog::Log(LOGERROR, "Scriptresult: failed to set abortRequested");
index 2c6d033..c2af2d9 100644 (file)
@@ -32,7 +32,7 @@
 #include "OMXClock.h"
 #include "utils/MathUtils.h"
 
-#define OMX_PRE_ROLL 800
+#define OMX_PRE_ROLL 200
 
 OMXClock::OMXClock()
 {
@@ -44,7 +44,6 @@ OMXClock::OMXClock()
 
   m_fps = 25.0f;
   m_omx_speed = DVD_PLAYSPEED_NORMAL;
-  m_audio_buffer = false;
   m_clock        = NULL;
 
   pthread_mutex_init(&m_lock, NULL);
@@ -107,9 +106,7 @@ bool OMXClock::OMXSetReferenceClock(bool lock /* = true */)
   OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE refClock;
   OMX_INIT_STRUCTURE(refClock);
 
-  if(CSettings::Get().GetBool("videoplayer.usedisplayasclock") && m_has_video)
-    refClock.eClock = OMX_TIME_RefClockVideo;
-  else if(m_has_audio)
+  if(m_has_audio)
     refClock.eClock = OMX_TIME_RefClockAudio;
   else
     refClock.eClock = OMX_TIME_RefClockVideo;
@@ -139,7 +136,6 @@ bool OMXClock::OMXInitialize(CDVDClock *clock, bool has_video, bool has_audio)
   m_video_start = false;
   m_audio_start = false;
   m_pause       = false;
-  m_audio_buffer = false;
 
   m_clock = clock;
 
@@ -248,52 +244,6 @@ bool  OMXClock::OMXStop(bool lock /* = true */)
   return true;
 }
 
-bool OMXClock::OMXStart(bool lock /* = true */)
-{
-  if(m_omx_clock.GetComponent() == NULL)
-    return false;
-
-  if(lock)
-    Lock();
-
-  CLog::Log(LOGDEBUG, "OMXClock::OMXStart\n");
-
-  OMX_ERRORTYPE omx_err = OMX_ErrorNone;
-  OMX_TIME_CONFIG_CLOCKSTATETYPE clock;
-  OMX_INIT_STRUCTURE(clock);
-
-  clock.eState      = OMX_TIME_ClockStateRunning;
-  clock.nOffset     = ToOMXTime(-1000LL * OMX_PRE_ROLL);
-
-  omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock);
-  if(omx_err != OMX_ErrorNone)
-  {
-    CLog::Log(LOGERROR, "OMXClock::Start error setting OMX_IndexConfigTimeClockState\n");
-    if(lock)
-      UnLock();
-    return false;
-  }
-
-  if(lock)
-    UnLock();
-
-  return true;
-}
-
-void OMXClock::VideoStart(bool video_start)
-{ 
-  Lock();
-  m_video_start = video_start; 
-  UnLock();
-};
-
-void OMXClock::AudioStart(bool audio_start) 
-{ 
-  Lock();
-  m_audio_start = audio_start; 
-  UnLock();
-};
-
 bool OMXClock::OMXStep(int steps /* = 1 */, bool lock /* = true */)
 {
   if(m_omx_clock.GetComponent() == NULL)
@@ -332,8 +282,6 @@ bool OMXClock::OMXReset(bool lock /* = true */)
   if(lock)
     Lock();
 
-  m_audio_buffer = false;
-
   OMX_ERRORTYPE omx_err = OMX_ErrorNone;
 
   if(!OMXSetReferenceClock(false))
@@ -355,25 +303,28 @@ bool OMXClock::OMXReset(bool lock /* = true */)
     return false;
   }
 
-  clock.eState    = OMX_TIME_ClockStateWaitingForStartTime;
-  clock.nOffset   = ToOMXTime(-1000LL * OMX_PRE_ROLL);
+  OMX_TIME_CLOCKSTATE old_eState = clock.eState;
+  if (clock.eState == OMX_TIME_ClockStateStopped)
+  {
+    clock.eState    = OMX_TIME_ClockStateWaitingForStartTime;
+    clock.nOffset   = ToOMXTime(-1000LL * OMX_PRE_ROLL);
 
-  OMXSetClockPorts(&clock);
+    OMXSetClockPorts(&clock);
 
-  if(clock.nWaitMask)
-  {
-    omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock);
-    if(omx_err != OMX_ErrorNone)
+    if(clock.nWaitMask)
     {
-      CLog::Log(LOGERROR, "OMXClock::OMXReset error setting OMX_IndexConfigTimeClockState\n");
-      if(lock)
-        UnLock();
-      return false;
+      omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock);
+      if(omx_err != OMX_ErrorNone)
+      {
+        CLog::Log(LOGERROR, "OMXClock::OMXReset error setting OMX_IndexConfigTimeClockState\n");
+        if(lock)
+          UnLock();
+        return false;
+      }
     }
   }
-
-  CLog::Log(LOGDEBUG, "OMXClock::OMXReset audio / video : %d / %d start audio / video : %d / %d wait mask %d\n", 
-      m_has_audio, m_has_video, m_audio_start, m_video_start, clock.nWaitMask);
+  CLog::Log(LOGDEBUG, "OMXClock::OMXReset audio / video : %d / %d start audio / video : %d / %d wait mask %d state : %d->%d\n",
+      m_has_audio, m_has_video, m_audio_start, m_video_start, clock.nWaitMask, old_eState, clock.eState);
 
   if(lock)
     UnLock();
@@ -381,7 +332,7 @@ bool OMXClock::OMXReset(bool lock /* = true */)
   return true;
 }
 
-double OMXClock::OMXMediaTime(bool fixPreroll /* true */ , bool lock /* = true */)
+double OMXClock::OMXMediaTime(bool lock /* = true */)
 {
   if(m_omx_clock.GetComponent() == NULL)
     return 0;
@@ -407,9 +358,6 @@ double OMXClock::OMXMediaTime(bool fixPreroll /* true */ , bool lock /* = true *
 
   pts = FromOMXTime(timeStamp.nTimestamp);
 
-  if(fixPreroll)
-    pts += (OMX_PRE_ROLL * 1000);
-
   if(lock)
     UnLock();
   
@@ -451,7 +399,7 @@ double OMXClock::OMXClockAdjustment(bool lock /* = true */)
 
 // Set the media time, so calls to get media time use the updated value,
 // useful after a seek so mediatime is updated immediately (rather than waiting for first decoded packet)
-bool OMXClock::OMXMediaTime(double pts, bool fixPreroll /* = true*/, bool lock /* = true*/)
+bool OMXClock::OMXMediaTime(double pts, bool lock /* = true*/)
 {
   if(m_omx_clock.GetComponent() == NULL)
     return false;
@@ -465,15 +413,11 @@ bool OMXClock::OMXMediaTime(double pts, bool fixPreroll /* = true*/, bool lock /
   OMX_INIT_STRUCTURE(timeStamp);
   timeStamp.nPortIndex = m_omx_clock.GetInputPort();
 
-  if(CSettings::Get().GetBool("videoplayer.usedisplayasclock") && m_has_video)
-    index = OMX_IndexConfigTimeCurrentVideoReference;
-  else if(m_has_audio)
+  if(m_has_audio)
     index = OMX_IndexConfigTimeCurrentAudioReference;
   else
     index = OMX_IndexConfigTimeCurrentVideoReference;
 
-  if(fixPreroll)
-    pts -= (OMX_PRE_ROLL * 1000);
   timeStamp.nTimestamp = ToOMXTime(pts);
 
   omx_err = m_omx_clock.SetConfig(index, &timeStamp);
@@ -524,7 +468,7 @@ bool OMXClock::OMXResume(bool lock /* = true */)
     if(lock)
       Lock();
 
-    if (OMXSetSpeed(m_omx_speed, false, true))
+    if (OMXSetSpeed(DVD_PLAYSPEED_NORMAL, false, true))
       m_pause = false;
 
     if(lock)
@@ -541,24 +485,24 @@ bool OMXClock::OMXSetSpeed(int speed, bool lock /* = true */, bool pause_resume
   if(lock)
     Lock();
 
-  m_audio_buffer = false; 
-
-  CLog::Log(LOGDEBUG, "OMXClock::OMXSetSpeed(%.2f) pause_resume:%d audio_buffer:%d", (float)m_omx_speed / (float)DVD_PLAYSPEED_NORMAL, pause_resume, m_audio_buffer);
-
-  OMX_ERRORTYPE omx_err = OMX_ErrorNone;
-  OMX_TIME_CONFIG_SCALETYPE scaleType;
-  OMX_INIT_STRUCTURE(scaleType);
+  CLog::Log(LOGDEBUG, "OMXClock::OMXSetSpeed(%.2f) pause_resume:%d", (float)speed / (float)DVD_PLAYSPEED_NORMAL, pause_resume);
 
-  scaleType.xScale = (speed << 16) / DVD_PLAYSPEED_NORMAL;
-  omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeScale, &scaleType);
-  if(omx_err != OMX_ErrorNone)
+  if (pause_resume)
   {
-    CLog::Log(LOGERROR, "OMXClock::OMXSetSpeed error setting OMX_IndexConfigTimeClockState\n");
-    if(lock)
-      UnLock();
-    return false;
-  }
+    OMX_ERRORTYPE omx_err = OMX_ErrorNone;
+    OMX_TIME_CONFIG_SCALETYPE scaleType;
+    OMX_INIT_STRUCTURE(scaleType);
 
+    scaleType.xScale = (speed << 16) / DVD_PLAYSPEED_NORMAL;
+    omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeScale, &scaleType);
+    if(omx_err != OMX_ErrorNone)
+    {
+      CLog::Log(LOGERROR, "OMXClock::OMXSetSpeed error setting OMX_IndexConfigTimeClockState\n");
+      if(lock)
+        UnLock();
+      return false;
+    }
+  }
   if (!pause_resume)
     m_omx_speed = speed;
 
@@ -625,47 +569,6 @@ int OMXClock::GetRefreshRate(double* interval)
   return true;
 }
 
-void OMXClock::OMXAudioBufferStart()
-{
-  Lock();
-
-  m_audio_buffer = true;
-
-  // only buffer when we are in normal playspeed
-  if(m_omx_clock.GetComponent() == NULL || m_omx_speed != DVD_PLAYSPEED_NORMAL)
-  {
-    UnLock();
-    return;
-  }
-
-  OMX_ERRORTYPE omx_err = OMX_ErrorNone;
-  OMX_TIME_CONFIG_SCALETYPE scaleType;
-  OMX_INIT_STRUCTURE(scaleType);
-
-  scaleType.xScale = 0;
-
-  CLog::Log(LOGDEBUG, "OMXClock::OMXAudioBufferStart");
-
-  omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeScale, &scaleType);
-  if(omx_err != OMX_ErrorNone)
-    CLog::Log(LOGERROR, "OMXClock::OMXAudioBufferStart error setting OMX_IndexConfigTimeClockState\n");
-
-  UnLock();
-}
-
-void OMXClock::OMXAudioBufferStop()
-{
-  Lock();
-
-  CLog::Log(LOGDEBUG, "OMXClock::OMXAudioBufferStop");
-
-  m_audio_buffer = false;
-
-  OMXSetSpeed(m_omx_speed, false);
-
-  UnLock();
-}
-
 double OMXClock::NormalizeFrameduration(double frameduration)
 {
   //if the duration is within 20 microseconds of a common duration, use that
index bc79d82..62d3149 100644 (file)
@@ -63,7 +63,6 @@ protected:
   int               m_omx_speed;
   bool              m_video_start;
   bool              m_audio_start;
-  bool              m_audio_buffer;
   CDVDClock         *m_clock;
 private:
   COMXCoreComponent m_omx_clock;
@@ -82,12 +81,11 @@ public:
   void OMXDeinitialize();
   bool OMXIsPaused() { return m_pause; };
   bool OMXStop(bool lock = true);
-  bool OMXStart(bool lock = true);
   bool OMXStep(int steps = 1, bool lock = true);
   bool OMXReset(bool lock = true);
-  double OMXMediaTime(bool fixPreroll = true, bool lock = true);
+  double OMXMediaTime(bool lock = true);
   double OMXClockAdjustment(bool lock = true);
-  bool OMXMediaTime(double pts, bool fixPreroll = true, bool lock = true);
+  bool OMXMediaTime(double pts, bool lock = true);
   bool OMXPause(bool lock = true);
   bool OMXResume(bool lock = true);
   bool OMXSetSpeed(int speed, bool lock = true, bool pause_resume = false);
@@ -102,13 +100,6 @@ public:
   bool HasAudio() { return m_has_audio; };
   void HasVideo(bool has_video) { m_has_video = has_video; };
   void HasAudio(bool has_audio) { m_has_audio = has_audio; };
-  bool VideoStart() { return m_video_start; };
-  bool AudioStart() { return m_audio_start; };
-  void VideoStart(bool video_start);
-  void AudioStart(bool audio_start);
-  void OMXAudioBufferStart();
-  void OMXAudioBufferStop();
-  bool OMXAudioBuffer() { return m_audio_buffer; };
 
   int     GetRefreshRate(double* interval = NULL);
   void    SetRefreshRate(double fps) { m_fps = fps; };
index c5dcaaa..a425017 100644 (file)
@@ -1669,6 +1669,11 @@ OMX_ERRORTYPE COMXCoreComponent::DecoderEventHandler(
       CLog::Log(LOGDEBUG, "%s::%s %s - OMX_EventPortSettingsChanged(output)\n", CLASSNAME, __func__, ctx->GetName().c_str());
       #endif
     break;
+    case OMX_EventParamOrConfigChanged:
+      #if defined(OMX_DEBUG_EVENTHANDLER)
+      CLog::Log(LOGDEBUG, "%s::%s %s - OMX_EventParamOrConfigChanged(output)\n", CLASSNAME, __func__, ctx->GetName().c_str());
+      #endif
+    break;
     #if defined(OMX_DEBUG_EVENTHANDLER)
     case OMX_EventMark:
       CLog::Log(LOGDEBUG, "%s::%s %s - OMX_EventMark\n", CLASSNAME, __func__, ctx->GetName().c_str());
index a9568e2..4edc5e3 100644 (file)
@@ -50,6 +50,14 @@ bool CRBP::Initialize()
   if(!m_omx_initialized)
     return false;
 
+  char response[80] = "";
+  m_arm_mem = 0;
+  m_gpu_mem = 0;
+  if (vc_gencmd(response, sizeof response, "get_mem arm") == 0)
+    vc_gencmd_number_property(response, "arm", &m_arm_mem);
+  if (vc_gencmd(response, sizeof response, "get_mem gpu") == 0)
+    vc_gencmd_number_property(response, "gpu", &m_gpu_mem);
+
   return true;
 }
 
@@ -59,6 +67,7 @@ void CRBP::LogFirmwareVerison()
   m_DllBcmHost->vc_gencmd(response, sizeof response, "version");
   response[sizeof(response) - 1] = '\0';
   CLog::Log(LOGNOTICE, "Raspberry PI firmware version: %s", response);
+  CLog::Log(LOGNOTICE, "ARM mem: %dMB GPU mem: %dMB", m_arm_mem, m_gpu_mem);
 }
 
 void CRBP::Deinitialize()
index 9ee1698..5f00e29 100644 (file)
@@ -47,11 +47,15 @@ public:
   bool Initialize();
   void LogFirmwareVerison();
   void Deinitialize();
+  int GetArmMem() { return m_arm_mem; }
+  int GetGpuMem() { return m_gpu_mem; }
 
 private:
   DllBcmHost *m_DllBcmHost;
   bool       m_initialized;
   bool       m_omx_initialized;
+  int        m_arm_mem;
+  int        m_gpu_mem;
   COMXCore   *m_OMX;
 };
 
index 266f06b..10c8b04 100644 (file)
@@ -50,7 +50,7 @@ CStdString CAlbum::GetArtistString() const
 
 CStdString CAlbum::GetGenreString() const
 {
-  return StringUtils::Join(artist, g_advancedSettings.m_musicItemSeparator);
+  return StringUtils::Join(genre, g_advancedSettings.m_musicItemSeparator);
 }
 
 bool CAlbum::operator<(const CAlbum &a) const
index fe793bc..19a9010 100644 (file)
@@ -440,13 +440,13 @@ int CMusicDatabase::AddSong(const int idAlbum,
   return idSong;
 }
 
-  int CMusicDatabase::UpdateSong(int idSong,
-                                 const CStdString& strTitle, const CStdString& strMusicBrainzTrackID,
-                                 const CStdString& strPathAndFileName, const CStdString& strComment, const CStdString& strThumb,
-                                 const std::vector<std::string>& artists, const std::vector<std::string>& genres,
-                                 int iTrack, int iDuration, int iYear,
-                                 int iTimesPlayed, int iStartOffset, int iEndOffset,
-                                 const CDateTime& dtLastPlayed, char rating, int iKaraokeNumber)
+int CMusicDatabase::UpdateSong(int idSong,
+                               const CStdString& strTitle, const CStdString& strMusicBrainzTrackID,
+                               const CStdString& strPathAndFileName, const CStdString& strComment, const CStdString& strThumb,
+                               const std::vector<std::string>& artists, const std::vector<std::string>& genres,
+                               int iTrack, int iDuration, int iYear,
+                               int iTimesPlayed, int iStartOffset, int iEndOffset,
+                               const CDateTime& dtLastPlayed, char rating, int iKaraokeNumber)
 {
   CStdString sql;
   if (idSong < 0)
@@ -3902,9 +3902,9 @@ bool CMusicDatabase::SaveAlbumThumb(int idAlbum, const CStdString& strThumb)
   SetArtForItem(idAlbum, "album", "thumb", strThumb);
   // TODO: We should prompt the user to update the art for songs
   CStdString sql = PrepareSQL("UPDATE art"
-                              " SET art_url='-'"
+                              " SET url='-'"
                               " WHERE media_type='song'"
-                              " AND art_type='thumb'"
+                              " AND type='thumb'"
                               " AND media_id IN"
                               " (SELECT idSong FROM song WHERE idAlbum=%ld)", idAlbum);
   ExecuteQuery(sql);
index 200f2a9..fb9b16a 100644 (file)
@@ -618,7 +618,7 @@ int CMusicInfoScanner::RetrieveMusicInfo(const CStdString& strDirectory, CFileIt
       // No - download the information
       CMusicAlbumInfo albumInfo;
       INFO_RET albumDownloadStatus = INFO_NOT_FOUND;
-      if (m_flags & SCAN_ONLINE)
+      if ((m_flags & SCAN_ONLINE) && albumScraper)
         albumDownloadStatus = DownloadAlbumInfo(*album, albumScraper, albumInfo);
 
       if (albumDownloadStatus == INFO_ADDED || albumDownloadStatus == INFO_HAVE_ALREADY)
@@ -640,14 +640,18 @@ int CMusicInfoScanner::RetrieveMusicInfo(const CStdString& strDirectory, CFileIt
       }
       else if (albumDownloadStatus == INFO_CANCELLED)
         break;
-      else // Cache the lookup failure so we don't retry
+      else
       {
+        // No download info, fallback to already gathered (eg. local) information/art (if any)
         album->idAlbum = m_musicDatabase.AddAlbum(album->strAlbum,
                                                   album->strMusicBrainzAlbumID,
                                                   album->GetArtistString(),
                                                   album->GetGenreString(),
                                                   album->iYear,
                                                   album->bCompilation);
+        if (!album->art.empty())
+          m_musicDatabase.SetArtForItem(album->idAlbum,
+                                        "album", album->art);
         m_albumCache.insert(make_pair(*album, *album));
       }
 
@@ -676,7 +680,7 @@ int CMusicInfoScanner::RetrieveMusicInfo(const CStdString& strDirectory, CFileIt
         // No - download the information
         CMusicArtistInfo artistInfo;
         INFO_RET artistDownloadStatus = INFO_NOT_FOUND;
-        if (m_flags & SCAN_ONLINE)
+        if ((m_flags & SCAN_ONLINE) && artistScraper)
           artistDownloadStatus = DownloadArtistInfo(artistTmp, artistScraper, artistInfo);
 
         if (artistDownloadStatus == INFO_ADDED || artistDownloadStatus == INFO_HAVE_ALREADY)
@@ -747,7 +751,7 @@ int CMusicInfoScanner::RetrieveMusicInfo(const CStdString& strDirectory, CFileIt
           // No - download the information
           CMusicArtistInfo artistInfo;
           INFO_RET artistDownloadStatus = INFO_NOT_FOUND;
-          if (m_flags & SCAN_ONLINE)
+          if ((m_flags & SCAN_ONLINE) && artistScraper)
             artistDownloadStatus = DownloadArtistInfo(artistTmp, artistScraper, artistInfo);
 
           if (artistDownloadStatus == INFO_ADDED || artistDownloadStatus == INFO_HAVE_ALREADY)
@@ -1009,8 +1013,10 @@ void CMusicInfoScanner::FindArtForAlbums(VECALBUMS &albums, const CStdString &pa
     }
   }
   if (albums.size() == 1 && !albumArt.empty())
-  { // assign to folder thumb as well
-    CMusicThumbLoader::SetCachedImage(path, "thumb", albumArt);
+  {
+    // assign to folder thumb as well
+    CFileItem albumItem(path, true);
+    CMusicThumbLoader::SetCachedImage(albumItem, "thumb", albumArt);
   }
 }
 
@@ -1048,10 +1054,13 @@ INFO_RET CMusicInfoScanner::UpdateDatabaseAlbumInfo(const CStdString& strPath, C
 
   // find album info
   ADDON::ScraperPtr scraper;
-  if (!m_musicDatabase.GetScraperForPath(strPath, scraper, ADDON::ADDON_SCRAPER_ALBUMS) || !scraper)
-    return INFO_ERROR;
+  bool result = m_musicDatabase.GetScraperForPath(strPath, scraper, ADDON::ADDON_SCRAPER_ALBUMS);
+
   m_musicDatabase.Close();
 
+  if (!result || !scraper)
+    return INFO_ERROR;
+
 loop:
   CLog::Log(LOGDEBUG, "%s downloading info for: %s", __FUNCTION__, album.strAlbum.c_str());
   INFO_RET albumDownloadStatus = DownloadAlbumInfo(album, scraper, albumInfo, pDialog);
index 8b4f0df..cf8ae67 100644 (file)
@@ -339,7 +339,7 @@ void CGUIWindowMusicBase::OnInfo(CFileItem *pItem, bool bShowInfo)
     }
   }
 
-  // check the first song we find in the folder, and grab it's album info
+  // check the first song we find in the folder, and grab its album info
   for (int i = 0; i < items.Size(); i++)
   {
     CFileItemPtr pItem = items[i];
@@ -347,9 +347,13 @@ void CGUIWindowMusicBase::OnInfo(CFileItem *pItem, bool bShowInfo)
     if (pItem->HasMusicInfoTag() && pItem->GetMusicInfoTag()->Loaded() &&
        !pItem->GetMusicInfoTag()->GetAlbum().IsEmpty())
     {
-      ShowAlbumInfo(pItem.get());
+      bool result = ShowAlbumInfo(pItem.get());
+
       if (m_dlgProgress && bShowInfo)
         m_dlgProgress->Close();
+
+      if (!result) // Something went wrong, so bail for the rest
+        break;
     }
   }
 
@@ -420,7 +424,7 @@ void CGUIWindowMusicBase::ShowArtistInfo(const CFileItem *pItem, bool bShowInfo
     m_dlgProgress->Close();
 }
 
-void CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /* = true */)
+bool CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /* = true */)
 {
   CQueryParams params;
   CDirectoryNode::GetDatabaseInfo(pItem->GetPath(), params);
@@ -431,12 +435,19 @@ void CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /
         !m_musicdatabase.GetAlbumInfo(params.GetAlbumId(), albumInfo.GetAlbum(), &albumInfo.GetAlbum().songs))
     {
       if (!CProfilesManager::Get().GetCurrentProfile().canWriteDatabases() && !g_passwordManager.bMasterUser)
-        break; // should display a dialog saying no permissions
+      {
+        // TODO: should display a dialog saying no permissions
+        if (m_dlgProgress)
+          m_dlgProgress->Close();
+        return false;
+      }
 
       if (g_application.IsMusicScanning())
       {
         CGUIDialogOK::ShowAndGetInput(189, 14057, 0, 0);
-        break;
+        if (m_dlgProgress)
+          m_dlgProgress->Close();
+        return false;
       }
 
       // show dialog box indicating we're searching the album
@@ -453,7 +464,9 @@ void CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /
       if (scanner.UpdateDatabaseAlbumInfo(pItem->GetPath(), albumInfo, bShowInfo) != INFO_ADDED || !albumInfo.Loaded())
       {
         CGUIDialogOK::ShowAndGetInput(185, 0, 500, 0);
-        break;
+        if (m_dlgProgress)
+          m_dlgProgress->Close();
+        return false;
       }
     }
 
@@ -479,6 +492,7 @@ void CGUIWindowMusicBase::ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo /
   }
   if (m_dlgProgress)
     m_dlgProgress->Close();
+  return true;
 }
 
 void CGUIWindowMusicBase::ShowSongInfo(CFileItem* pItem)
index 2b86799..6d616dd 100644 (file)
@@ -88,7 +88,7 @@ protected:
   bool FindAlbumInfo(const CFileItem* album, MUSIC_GRABBER::CMusicAlbumInfo& albumInfo, ALLOW_SELECTION allowSelection);
   bool FindArtistInfo(const CFileItem* artist, MUSIC_GRABBER::CMusicArtistInfo& artistInfo, ALLOW_SELECTION allowSelection);
 
-  void ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo = true);
+  bool ShowAlbumInfo(const CFileItem *pItem, bool bShowInfo = true);
   void ShowArtistInfo(const CFileItem *pItem, bool bShowInfo = true);
   void ShowSongInfo(CFileItem* pItem);
   void UpdateThumb(const CAlbum &album, const CStdString &path);
index 89e940e..1708e3b 100644 (file)
@@ -43,8 +43,10 @@ int CHTTPJsonRpcHandler::HandleHTTPRequest(const HTTPRequest &request)
   if (request.method == POST)
   {
     string contentType = CWebServer::GetRequestHeaderValue(request.connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_CONTENT_TYPE);
-    // If the content-type of the request was specified, it must be application/json
-    if (!contentType.empty() && contentType.compare("application/json") != 0)
+    // If the content-type of the request was specified, it must be application/json-rpc, application/json, or application/jsonrequest
+    // http://www.jsonrpc.org/historical/json-rpc-over-http.html
+    if (!contentType.empty() && contentType.compare("application/json-rpc") != 0 &&
+        contentType.compare("application/json") != 0 && contentType.compare("application/jsonrequest") != 0)
     {
       m_responseType = HTTPError;
       m_responseCode = MHD_HTTP_UNSUPPORTED_MEDIA_TYPE;
index 2ee533e..0514cd3 100644 (file)
@@ -9,7 +9,7 @@
        <key>CFBundleExecutable</key>
        <string>XBMC</string>
        <key>CFBundleGetInfoString</key>
-       <string>13.0.alpha5</string>
+       <string>13.0.alpha6</string>
        <key>CFBundleIconFile</key>
        <string>xbmc.icns</string>
        <key>CFBundleIdentifier</key>
@@ -19,7 +19,7 @@
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>13.0.alpha5</string>
+       <string>13.0.alpha6</string>
        <key>CFBundleVersion</key>
        <string>r####</string>
        <key>CFBundleSignature</key>
index b32e781..a0ded3c 100644 (file)
@@ -64,6 +64,9 @@ using namespace PVR;
 CGUIDialogPVRChannelManager::CGUIDialogPVRChannelManager(void) :
     CGUIDialog(WINDOW_DIALOG_PVR_CHANNEL_MANAGER, "DialogPVRChannelManager.xml"),
     m_bIsRadio(false),
+    m_bMovingMode(false),
+    m_bContainsChanges(false),
+    m_iSelected(0),
     m_channelItems(new CFileItemList)
 {
 }
@@ -134,9 +137,10 @@ bool CGUIDialogPVRChannelManager::OnAction(const CAction& action)
          CGUIDialog::OnAction(action);
 }
 
-bool CGUIDialogPVRChannelManager::OnMessageInit(CGUIMessage &message)
+void CGUIDialogPVRChannelManager::OnInitWindow()
 {
-  CGUIWindow::OnMessage(message);
+  CGUIDialog::OnInitWindow();
+
   m_iSelected = 0;
   m_bIsRadio = false;
   m_bMovingMode = false;
@@ -144,8 +148,13 @@ bool CGUIDialogPVRChannelManager::OnMessageInit(CGUIMessage &message)
   SetProperty("IsRadio", "");
   Update();
   SetData(m_iSelected);
+}
 
-  return true;
+void CGUIDialogPVRChannelManager::OnDeinitWindow(int nextWindowID)
+{
+  Clear();
+
+  CGUIDialog::OnDeinitWindow(nextWindowID);
 }
 
 bool CGUIDialogPVRChannelManager::OnClickListChannels(CGUIMessage &message)
@@ -573,11 +582,6 @@ bool CGUIDialogPVRChannelManager::OnMessage(CGUIMessage& message)
 
   switch (iMessage)
   {
-    case GUI_MSG_WINDOW_DEINIT:
-      Clear();
-      break;
-    case GUI_MSG_WINDOW_INIT:
-      return OnMessageInit(message);
     case GUI_MSG_CLICKED:
       return OnMessageClick(message);
   }
index ca8e51a..ac56a9f 100644 (file)
@@ -39,12 +39,14 @@ namespace PVR
     virtual CFileItemPtr GetCurrentListItem(int offset = 0);
 
   protected:
+    virtual void OnInitWindow();
+    virtual void OnDeinitWindow(int nextWindowID);
+
     virtual bool OnPopupMenu(int iItem);
     virtual bool OnContextButton(int itemNumber, CONTEXT_BUTTON button);
 
     virtual bool OnActionMove(const CAction &action);
 
-    virtual bool OnMessageInit(CGUIMessage &message);
     virtual bool OnMessageClick(CGUIMessage &message);
 
     virtual bool OnClickListChannels(CGUIMessage &message);
index 0e5ba03..b2fb108 100644 (file)
@@ -64,35 +64,6 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
 {
   switch (message.GetMessage())
   {
-  case GUI_MSG_WINDOW_DEINIT:
-    {
-      if (m_group)
-      {
-        g_PVRManager.SetPlayingGroup(m_group);
-        SetLastSelectedItem(m_group->GroupID());
-      }
-      Clear();
-    }
-    break;
-
-  case GUI_MSG_WINDOW_INIT:
-    {
-      /* Close dialog immediately if now TV or radio channel is playing */
-      if (!g_PVRManager.IsPlaying())
-      {
-        Close();
-        return true;
-      }
-
-      m_group = GetPlayingGroup();
-
-      CGUIWindow::OnMessage(message);
-      Update(true);
-
-      return true;
-    }
-    break;
-
   case GUI_MSG_CLICKED:
     {
       int iControl = message.GetSenderId();
@@ -122,6 +93,33 @@ bool CGUIDialogPVRChannelsOSD::OnMessage(CGUIMessage& message)
   return CGUIDialog::OnMessage(message);
 }
 
+void CGUIDialogPVRChannelsOSD::OnInitWindow()
+{
+  /* Close dialog immediately if now TV or radio channel is playing */
+  if (!g_PVRManager.IsPlaying())
+  {
+    Close();
+    return;
+  }
+
+  Update();
+
+  CGUIDialog::OnInitWindow();
+}
+
+void CGUIDialogPVRChannelsOSD::OnDeinitWindow(int nextWindowID)
+{
+  if (m_group)
+  {
+    g_PVRManager.SetPlayingGroup(m_group);
+    m_group.reset();
+  }
+
+  CGUIDialog::OnDeinitWindow(nextWindowID);
+
+  Clear();
+}
+
 bool CGUIDialogPVRChannelsOSD::OnAction(const CAction &action)
 {
   switch (action.GetID())
@@ -129,11 +127,17 @@ bool CGUIDialogPVRChannelsOSD::OnAction(const CAction &action)
   case ACTION_PREVIOUS_CHANNELGROUP:
   case ACTION_NEXT_CHANNELGROUP:
     {
+      // save control states and currently selected item of group
+      SaveControlStates();
+
+      // switch to next or previous group
       CPVRChannelGroupPtr group = GetPlayingGroup();
       CPVRChannelGroupPtr nextGroup = action.GetID() == ACTION_NEXT_CHANNELGROUP ? group->GetNextGroup() : group->GetPreviousGroup();
       g_PVRManager.SetPlayingGroup(nextGroup);
-      SetLastSelectedItem(group->GroupID());
       Update();
+
+      // restore control states and previously selected item of group
+      RestoreControlStates();
       return true;
     }
   }
@@ -150,11 +154,6 @@ CPVRChannelGroupPtr CGUIDialogPVRChannelsOSD::GetPlayingGroup()
 
 void CGUIDialogPVRChannelsOSD::Update()
 {
-  CGUIDialogPVRChannelsOSD::Update(false);
-}
-
-void CGUIDialogPVRChannelsOSD::Update(bool selectPlayingChannel)
-{
   // lock our display, as this window is rendered from the player thread
   g_graphicsContext.Lock();
 
@@ -174,12 +173,37 @@ void CGUIDialogPVRChannelsOSD::Update(bool selectPlayingChannel)
   {
     group->GetMembers(*m_vecItems);
     m_viewControl.SetItems(*m_vecItems);
-    m_viewControl.SetSelectedItem(selectPlayingChannel ? group->GetIndex(*channel) : GetLastSelectedItem(group->GroupID()));
+
+    if(!m_group)
+    {
+      m_group = group;
+      m_viewControl.SetSelectedItem(group->GetIndex(*channel));
+      SaveSelectedItem(group->GroupID());
+    }
   }
 
   g_graphicsContext.Unlock();
 }
 
+void CGUIDialogPVRChannelsOSD::SaveControlStates()
+{
+  CGUIDialog::SaveControlStates();
+
+  CPVRChannelGroupPtr group = GetPlayingGroup();
+  SaveSelectedItem(group->GroupID());
+}
+
+void CGUIDialogPVRChannelsOSD::RestoreControlStates()
+{
+  CGUIDialog::RestoreControlStates();
+
+  CPVRChannelGroupPtr group = GetPlayingGroup();
+  if(group)
+  {
+    m_viewControl.SetSelectedItem(GetLastSelectedItem(group->GroupID()));
+  }
+}
+
 void CGUIDialogPVRChannelsOSD::Clear()
 {
   m_viewControl.Clear();
@@ -292,7 +316,7 @@ void CGUIDialogPVRChannelsOSD::Notify(const Observable &obs, const ObservableMes
   }
 }
 
-void CGUIDialogPVRChannelsOSD::SetLastSelectedItem(int iGroupID)
+void CGUIDialogPVRChannelsOSD::SaveSelectedItem(int iGroupID)
 {
   m_groupSelectedItems[iGroupID] = m_viewControl.GetSelectedItem();
 }
index 64f0b68..2266a8d 100644 (file)
@@ -41,12 +41,16 @@ namespace PVR
     virtual void Notify(const Observable &obs, const ObservableMessage msg);
 
   protected:
+    virtual void OnInitWindow();
+    virtual void OnDeinitWindow(int nextWindowID);
+    virtual void RestoreControlStates();
+    virtual void SaveControlStates();
+
     void CloseOrSelect(unsigned int iItem);
     void GotoChannel(int iItem);
     void ShowInfo(int item);
     void Clear();
     void Update();
-    void Update(bool selectPlayingChannel);
     CPVRChannelGroupPtr GetPlayingGroup();
     CGUIControl *GetFirstFocusableControl(int id);
 
@@ -56,7 +60,7 @@ namespace PVR
   private:
     CPVRChannelGroupPtr m_group;
     std::map<int,int> m_groupSelectedItems;
-    void SetLastSelectedItem(int iGroupID);
+    void SaveSelectedItem(int iGroupID);
     int GetLastSelectedItem(int iGroupID) const;
   };
 }
index e2d7dba..999b3a1 100644 (file)
@@ -263,23 +263,6 @@ bool CGUIDialogPVRGroupManager::OnMessage(CGUIMessage& message)
 
   switch (iMessage)
   {
-    case GUI_MSG_WINDOW_DEINIT:
-    {
-      Clear();
-    }
-    break;
-
-    case GUI_MSG_WINDOW_INIT:
-    {
-      CGUIWindow::OnMessage(message);
-      m_iSelectedUngroupedChannel  = 0;
-      m_iSelectedGroupMember = 0;
-      m_iSelectedChannelGroup = 0;
-      Update();
-      return true;
-    }
-    break;
-
     case GUI_MSG_CLICKED:
     {
       OnMessageClick(message);
@@ -290,6 +273,21 @@ bool CGUIDialogPVRGroupManager::OnMessage(CGUIMessage& message)
   return CGUIDialog::OnMessage(message);
 }
 
+void CGUIDialogPVRGroupManager::OnInitWindow()
+{
+  CGUIDialog::OnInitWindow();
+  m_iSelectedUngroupedChannel  = 0;
+  m_iSelectedGroupMember = 0;
+  m_iSelectedChannelGroup = 0;
+  Update();
+}
+
+void CGUIDialogPVRGroupManager::OnDeinitWindow(int nextWindowID)
+{
+  Clear();
+  CGUIDialog::OnDeinitWindow(nextWindowID);
+}
+
 void CGUIDialogPVRGroupManager::OnWindowLoaded()
 {
   CGUIDialog::OnWindowLoaded();
index 878d1d2..b0f1489 100644 (file)
@@ -38,6 +38,9 @@ namespace PVR
     void SetRadio(bool IsRadio) { m_bIsRadio = IsRadio; }
 
   protected:
+    virtual void OnInitWindow();
+    virtual void OnDeinitWindow(int nextWindowID);
+
     void Clear();
     void Update();
 
index 74965eb..30098b6 100644 (file)
@@ -189,10 +189,6 @@ bool CGUIDialogPVRGuideInfo::OnMessage(CGUIMessage& message)
 {
   switch (message.GetMessage())
   {
-  case GUI_MSG_WINDOW_INIT:
-    CGUIDialog::OnMessage(message);
-    Update();
-    return true;
   case GUI_MSG_CLICKED:
     return OnClickButtonOK(message) ||
            OnClickButtonRecord(message) ||
@@ -212,8 +208,10 @@ CFileItemPtr CGUIDialogPVRGuideInfo::GetCurrentListItem(int offset)
   return m_progItem;
 }
 
-void CGUIDialogPVRGuideInfo::Update()
+void CGUIDialogPVRGuideInfo::OnInitWindow()
 {
+  CGUIDialog::OnInitWindow();
+
   const CEpgInfoTag *tag = m_progItem->GetEPGInfoTag();
   if (!tag)
   {
index 1891a4e..70eeaca 100644 (file)
@@ -42,7 +42,8 @@ namespace PVR
     void SetProgInfo(const CFileItem *item);
 
   protected:
-    void Update();
+    virtual void OnInitWindow();
+
     bool ActionStartTimer(const EPG::CEpgInfoTag *tag);
     bool ActionCancelTimer(CFileItemPtr timer);
 
index a8e25aa..817cb9e 100644 (file)
@@ -48,26 +48,6 @@ bool CGUIDialogPVRGuideOSD::OnMessage(CGUIMessage& message)
 {
   switch (message.GetMessage())
   {
-  case GUI_MSG_WINDOW_DEINIT:
-    {
-      Clear();
-    }
-    break;
-
-  case GUI_MSG_WINDOW_INIT:
-    {
-      /* Close dialog immediately if now TV or radio channel is playing */
-      if (!g_PVRManager.IsPlaying())
-      {
-        Close();
-        return true;
-      }
-      CGUIWindow::OnMessage(message);
-      Update();
-      return true;
-    }
-    break;
-
   case GUI_MSG_CLICKED:
     {
       int iControl = message.GetSenderId();
@@ -90,8 +70,15 @@ bool CGUIDialogPVRGuideOSD::OnMessage(CGUIMessage& message)
   return CGUIDialog::OnMessage(message);
 }
 
-void CGUIDialogPVRGuideOSD::Update()
+void CGUIDialogPVRGuideOSD::OnInitWindow()
 {
+  /* Close dialog immediately if no TV or radio channel is playing */
+  if (!g_PVRManager.IsPlaying())
+  {
+    Close();
+    return;
+  }
+
   // lock our display, as this window is rendered from the player thread
   g_graphicsContext.Lock();
   m_viewControl.SetCurrentView(DEFAULT_VIEW_LIST);
@@ -102,7 +89,12 @@ void CGUIDialogPVRGuideOSD::Update()
   g_PVRManager.GetCurrentEpg(*m_vecItems);
   m_viewControl.SetItems(*m_vecItems);
 
-  /* select the active entry */
+  g_graphicsContext.Unlock();
+
+  // call init
+  CGUIDialog::OnInitWindow();
+
+  // select the active entry
   unsigned int iSelectedItem = 0;
   for (int iEpgPtr = 0; iEpgPtr < m_vecItems->Size(); iEpgPtr++)
   {
@@ -114,8 +106,12 @@ void CGUIDialogPVRGuideOSD::Update()
     }
   }
   m_viewControl.SetSelectedItem(iSelectedItem);
+}
 
-  g_graphicsContext.Unlock();
+void CGUIDialogPVRGuideOSD::OnDeinitWindow(int nextWindowID)
+{
+  CGUIDialog::OnDeinitWindow(nextWindowID);
+  Clear();
 }
 
 void CGUIDialogPVRGuideOSD::Clear()
index 5d32dbc..eafc4c9 100644 (file)
@@ -36,9 +36,11 @@ namespace PVR
     virtual void OnWindowUnload();
 
   protected:
+    virtual void OnInitWindow();
+    virtual void OnDeinitWindow(int nextWindowID);
+
     void ShowInfo(int iItem);
     void Clear();
-    void Update();
 
     CGUIControl *GetFirstFocusableControl(int id);
 
index e353525..78f5c10 100644 (file)
@@ -177,13 +177,6 @@ bool CGUIDialogPVRGuideSearch::OnMessage(CGUIMessage& message)
 
   switch (message.GetMessage())
   {
-    case GUI_MSG_WINDOW_INIT:
-    {
-      m_bConfirmed = false;
-      m_bCanceled = false;
-    }
-    break;
-
     case GUI_MSG_CLICKED:
     {
       int iControl = message.GetSenderId();
@@ -223,6 +216,14 @@ bool CGUIDialogPVRGuideSearch::OnMessage(CGUIMessage& message)
   return false;
 }
 
+void CGUIDialogPVRGuideSearch::OnInitWindow()
+{
+  CGUIDialog::OnInitWindow();
+
+  m_bConfirmed = false;
+  m_bCanceled = false;
+}
+
 void CGUIDialogPVRGuideSearch::OnWindowLoaded()
 {
   Update();
index 8530a34..a656255 100644 (file)
@@ -43,6 +43,8 @@ namespace PVR
     void OnSearch();
 
   protected:
+    virtual void OnInitWindow();
+
     void UpdateChannelSpin(void);
     void UpdateGroupsSpin(void);
     void UpdateGenreSpin(void);
index 69496b8..1d899aa 100644 (file)
@@ -47,7 +47,10 @@ CGUIDialogPVRTimerSettings::CGUIDialogPVRTimerSettings(void)
   : CGUIDialogSettings(WINDOW_DIALOG_PVR_TIMER_SETTING, "DialogPVRTimerSettings.xml")
 {
   m_cancelled = true;
-  m_tmp_day   = 11;
+  m_tmp_day = 11;
+  m_bTimerActive = false;
+  m_tmp_iFirstDay = 0;
+  m_timerItem = NULL;
   m_loadType = LOAD_EVERY_TIME;
 }
 
index b8d25d9..a128fa8 100644 (file)
@@ -219,9 +219,9 @@ void CAdvancedSettings::Initialize()
   //m_videoStackRegExps.push_back("(.*?)([ ._-]*[0-9])(.*?)(\\.[^.]+)$");
 
   // foo.s01.e01, foo.s01_e01, S01E02 foo, S01 - E02
-  m_tvshowEnumRegExps.push_back(TVShowRegexp(false,"[Ss]([0-9]+)[][ ._-]*[Ee]([0-9]+(?:(?:[a-i]|\\.[1-9])(?![0-9]))?)([^\\\\/]*)$"));
+  m_tvshowEnumRegExps.push_back(TVShowRegexp(false,"s([0-9]+)[ ._-]*e([0-9]+(?:(?:[a-i]|\\.[1-9])(?![0-9]))?)([^\\\\/]*)$"));
   // foo.ep01, foo.EP_01
-  m_tvshowEnumRegExps.push_back(TVShowRegexp(false,"[\\._ -]()[Ee][Pp]_?([0-9]+(?:(?:[a-i]|\\.[1-9])(?![0-9]))?)([^\\\\/]*)$"));
+  m_tvshowEnumRegExps.push_back(TVShowRegexp(false,"[\\._ -]()ep_?([0-9]+(?:(?:[a-i]|\\.[1-9])(?![0-9]))?)([^\\\\/]*)$"));
   // foo.yyyy.mm.dd.* (byDate=true)
   m_tvshowEnumRegExps.push_back(TVShowRegexp(true,"([0-9]{4})[\\.-]([0-9]{2})[\\.-]([0-9]{2})"));
   // foo.mm.dd.yyyy.* (byDate=true)
@@ -233,7 +233,7 @@ void CAdvancedSettings::Initialize()
   // Part I, Pt.VI
   m_tvshowEnumRegExps.push_back(TVShowRegexp(false,"[\\/._ -]p(?:ar)?t[_. -]()([ivx]+)([._ -][^\\/]*)$"));
 
-  m_tvshowMultiPartEnumRegExp = "^[-_EeXx]+([0-9]+(?:(?:[a-i]|\\.[1-9])(?![0-9]))?)";
+  m_tvshowMultiPartEnumRegExp = "^[-_ex]+([0-9]+(?:(?:[a-i]|\\.[1-9])(?![0-9]))?)";
 
   m_remoteDelay = 3;
   m_controllerDeadzone = 0.2f;
index edf45a1..4209726 100644 (file)
@@ -556,14 +556,14 @@ CBitstreamConverter::~CBitstreamConverter()
   Close();
 }
 
-bool CBitstreamConverter::Open(enum CodecID codec, uint8_t *in_extradata, int in_extrasize, bool to_annexb)
+bool CBitstreamConverter::Open(enum AVCodecID codec, uint8_t *in_extradata, int in_extrasize, bool to_annexb)
 {
   m_codec = codec;
   m_to_annexb = to_annexb;
 
   switch(codec)
   {
-    case CODEC_ID_H264:
+    case AV_CODEC_ID_H264:
       if (in_extrasize < 7 || in_extradata == NULL)
       {
         CLog::Log(LOGERROR, "CBitstreamConverter::Open avcC data too small or missing\n");
@@ -696,7 +696,7 @@ bool CBitstreamConverter::Convert(uint8_t *pData, int iSize)
 
   if (pData)
   {
-    if (m_codec == CODEC_ID_H264)
+    if (m_codec == AV_CODEC_ID_H264)
     {
       if (m_to_annexb)
       {
index 3c21314..788ebcc 100644 (file)
@@ -124,7 +124,7 @@ public:
   static void     skip_bits( bits_reader_t *br, int nbits );
   static uint32_t get_bits( bits_reader_t *br, int nbits );
 
-  bool Open(enum CodecID codec, uint8_t *in_extradata, int in_extrasize, bool to_annexb);
+  bool Open(enum AVCodecID codec, uint8_t *in_extradata, int in_extrasize, bool to_annexb);
   void Close(void);
   bool NeedConvert(void) { return m_convert_bitstream; };
   bool Convert(uint8_t *pData, int iSize);
@@ -175,7 +175,7 @@ protected:
   bool              m_convert_bytestream;
   DllAvUtil         *m_dllAvUtil;
   DllAvFormat       *m_dllAvFormat;
-  CodecID           m_codec;
+  AVCodecID           m_codec;
 };
 
 #endif
index 3c56881..242687a 100644 (file)
@@ -871,7 +871,7 @@ namespace VIDEO
 
     for (unsigned int i=0;i<expression.size();++i)
     {
-      CRegExp reg;
+      CRegExp reg(true);
       if (!reg.RegComp(expression[i].regexp))
         continue;
 
@@ -940,7 +940,7 @@ namespace VIDEO
       // add what we found by now
       episodeList.push_back(episode);
 
-      CRegExp reg2;
+      CRegExp reg2(true);
       // check the remainder of the string for any further episodes.
       if (!byDate && reg2.RegComp(g_advancedSettings.m_tvshowMultiPartEnumRegExp))
       {
@@ -1809,7 +1809,10 @@ namespace VIDEO
     CNfoFile::NFOResult result=CNfoFile::NO_NFO;
     if (!strNfoFile.IsEmpty() && CFile::Exists(strNfoFile))
     {
-      result = m_nfoReader.Create(strNfoFile,info,pItem->GetVideoInfoTag()->m_iEpisode);
+      if (info->Content() == CONTENT_TVSHOWS && !pItem->m_bIsFolder)
+        result = m_nfoReader.Create(strNfoFile,info,pItem->GetVideoInfoTag()->m_iEpisode);
+      else
+        result = m_nfoReader.Create(strNfoFile,info);
 
       CStdString type;
       switch(result)
index 057c572..5045ede 100644 (file)
@@ -71,12 +71,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Team XBMC"
             VALUE "FileDescription", "XBMC"
-            VALUE "FileVersion", "13.0-ALPHA5"
+            VALUE "FileVersion", "13.0-ALPHA6"
             VALUE "InternalName", "XBMC.exe"
             VALUE "LegalCopyright", "Copyright (c) Team XBMC.  All rights reserved."
             VALUE "OriginalFilename", "XBMC.exe"
             VALUE "ProductName", "XBMC for Windows"
-            VALUE "ProductVersion", "13.0-ALPHA5"
+            VALUE "ProductVersion", "13.0-ALPHA6"
         END
     END
     BLOCK "VarFileInfo"