diff options
Diffstat (limited to 'media')
-rw-r--r-- | media/java/android/media/ExifInterface.java | 2 | ||||
-rw-r--r-- | media/java/android/media/MediaRouter.java | 65 | ||||
-rw-r--r-- | media/java/android/media/RemoteController.java | 2 | ||||
-rw-r--r-- | media/jni/Android.mk | 4 |
4 files changed, 37 insertions, 36 deletions
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index 20eb356..9db35fc 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -98,7 +98,7 @@ public class ExifInterface { private static SimpleDateFormat sFormatter; static { - System.loadLibrary("exif_jni"); + System.loadLibrary("jhead_jni"); sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss"); sFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); } diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index d17e8f8..a4d491d8 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -60,9 +60,6 @@ public class MediaRouter { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); static class Static implements DisplayManager.DisplayListener { - // Time between wifi display scans when actively scanning in milliseconds. - private static final int WIFI_DISPLAY_SCAN_INTERVAL = 10000; - final Context mAppContext; final Resources mResources; final IAudioService mAudioService; @@ -86,6 +83,7 @@ public class MediaRouter { final boolean mCanConfigureWifiDisplays; boolean mActivelyScanningWifiDisplays; + String mPreviousActiveWifiDisplayAddress; int mDiscoveryRequestRouteTypes; boolean mDiscoverRequestActiveScan; @@ -105,16 +103,6 @@ public class MediaRouter { } }; - final Runnable mScanWifiDisplays = new Runnable() { - @Override - public void run() { - if (mActivelyScanningWifiDisplays) { - mDisplayService.scanWifiDisplays(); - mHandler.postDelayed(this, WIFI_DISPLAY_SCAN_INTERVAL); - } - } - }; - Static(Context appContext) { mAppContext = appContext; mResources = Resources.getSystem(); @@ -278,15 +266,24 @@ public class MediaRouter { } // Update wifi display scanning. - if (activeScanWifiDisplay && mCanConfigureWifiDisplays) { - if (!mActivelyScanningWifiDisplays) { - mActivelyScanningWifiDisplays = true; - mHandler.post(mScanWifiDisplays); + // TODO: All of this should be managed by the media router service. + if (mCanConfigureWifiDisplays) { + if (mSelectedRoute != null + && mSelectedRoute.matchesTypes(ROUTE_TYPE_REMOTE_DISPLAY)) { + // Don't scan while already connected to a remote display since + // it may interfere with the ongoing transmission. + activeScanWifiDisplay = false; } - } else { - if (mActivelyScanningWifiDisplays) { - mActivelyScanningWifiDisplays = false; - mHandler.removeCallbacks(mScanWifiDisplays); + if (activeScanWifiDisplay) { + if (!mActivelyScanningWifiDisplays) { + mActivelyScanningWifiDisplays = true; + mDisplayService.startWifiDisplayScan(); + } + } else { + if (mActivelyScanningWifiDisplays) { + mActivelyScanningWifiDisplays = false; + mDisplayService.stopWifiDisplayScan(); + } } } @@ -944,6 +941,9 @@ public class MediaRouter { } dispatchRouteSelected(types & route.getSupportedTypes(), route); } + + // The behavior of active scans may depend on the currently selected route. + sStatic.updateDiscoveryRequest(); } static void selectDefaultRouteStatic() { @@ -1290,10 +1290,8 @@ public class MediaRouter { } static void updateWifiDisplayStatus(WifiDisplayStatus status) { - boolean wantScan = false; WifiDisplay[] displays; WifiDisplay activeDisplay; - if (status.getFeatureState() == WifiDisplayStatus.FEATURE_STATE_ON) { displays = status.getDisplays(); activeDisplay = status.getActiveDisplay(); @@ -1313,6 +1311,8 @@ public class MediaRouter { displays = WifiDisplay.EMPTY_ARRAY; activeDisplay = null; } + String activeDisplayAddress = activeDisplay != null ? + activeDisplay.getDeviceAddress() : null; // Add or update routes. for (int i = 0; i < displays.length; i++) { @@ -1322,9 +1322,11 @@ public class MediaRouter { if (route == null) { route = makeWifiDisplayRoute(d, status); addRouteStatic(route); - wantScan = true; } else { - updateWifiDisplayRoute(route, d, status); + String address = d.getDeviceAddress(); + boolean disconnected = !address.equals(activeDisplayAddress) + && address.equals(sStatic.mPreviousActiveWifiDisplayAddress); + updateWifiDisplayRoute(route, d, status, disconnected); } if (d.equals(activeDisplay)) { selectRouteStatic(route.getSupportedTypes(), route, false); @@ -1343,11 +1345,9 @@ public class MediaRouter { } } - // Don't scan if we're already connected to a wifi display, - // the scanning process can cause a hiccup with some configurations. - if (wantScan && activeDisplay != null && sStatic.mCanConfigureWifiDisplays) { - sStatic.mDisplayService.scanWifiDisplays(); - } + // Remember the current active wifi display address so that we can infer disconnections. + // TODO: This hack will go away once all of this is moved into the media router service. + sStatic.mPreviousActiveWifiDisplayAddress = activeDisplayAddress; } private static boolean shouldShowWifiDisplay(WifiDisplay d, WifiDisplay activeDisplay) { @@ -1405,7 +1405,8 @@ public class MediaRouter { } private static void updateWifiDisplayRoute( - RouteInfo route, WifiDisplay display, WifiDisplayStatus wfdStatus) { + RouteInfo route, WifiDisplay display, WifiDisplayStatus wfdStatus, + boolean disconnected) { boolean changed = false; final String newName = display.getFriendlyDisplayName(); if (!route.getName().equals(newName)) { @@ -1423,7 +1424,7 @@ public class MediaRouter { dispatchRouteChanged(route); } - if (!enabled && route.isSelected()) { + if ((!enabled || disconnected) && route.isSelected()) { // Oops, no longer available. Reselect the default. selectDefaultRouteStatic(); } diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index 6dbb3cd..910b24c 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -404,7 +404,7 @@ public final class RemoteController * @throws IllegalArgumentException */ public boolean setSynchronizationMode(int sync) throws IllegalArgumentException { - if ((sync != POSITION_SYNCHRONIZATION_NONE) || (sync != POSITION_SYNCHRONIZATION_CHECK)) { + if ((sync != POSITION_SYNCHRONIZATION_NONE) && (sync != POSITION_SYNCHRONIZATION_CHECK)) { throw new IllegalArgumentException("Unknown synchronization mode " + sync); } if (!mIsRegistered) { diff --git a/media/jni/Android.mk b/media/jni/Android.mk index 63a61e2..685bbcc 100644 --- a/media/jni/Android.mk +++ b/media/jni/Android.mk @@ -37,11 +37,11 @@ LOCAL_SHARED_LIBRARIES := \ libcamera_client \ libmtp \ libusbhost \ - libexif \ + libjhead \ libstagefright_amrnb_common \ LOCAL_REQUIRED_MODULES := \ - libexif_jni + libjhead_jni LOCAL_STATIC_LIBRARIES := \ libstagefright_amrnbenc |