Merge "Use video/webm mime type for WEBM files"
diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp
index 8f84b81..45b7f27 100644
--- a/core/jni/android_server_BluetoothEventLoop.cpp
+++ b/core/jni/android_server_BluetoothEventLoop.cpp
@@ -229,6 +229,13 @@
DBusError err;
dbus_error_init(&err);
+ const char *agent_path = "/android/bluetooth/agent";
+ const char *capabilities = "DisplayYesNo";
+ if (register_agent(nat, agent_path, capabilities) < 0) {
+ dbus_connection_unregister_object_path (nat->conn, agent_path);
+ return JNI_FALSE;
+ }
+
// Add a filter for all incoming messages
if (!dbus_connection_add_filter(nat->conn, event_filter, nat, NULL)){
return JNI_FALSE;
@@ -294,12 +301,6 @@
return JNI_FALSE;
}
- const char *agent_path = "/android/bluetooth/agent";
- const char *capabilities = "DisplayYesNo";
- if (register_agent(nat, agent_path, capabilities) < 0) {
- dbus_connection_unregister_object_path (nat->conn, agent_path);
- return JNI_FALSE;
- }
return JNI_TRUE;
}
return JNI_FALSE;
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 4e9f752..9bf8b2d 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -55,7 +55,6 @@
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
-import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -2159,7 +2158,7 @@
case MSG_RCDISPLAY_UPDATE:
synchronized(mCurrentRcLock) {
- if (mCurrentRcClientRef.get() == null) {
+ if (mCurrentRcClient == null) {
// the remote control display owner has changed between the
// the message to update the display was sent, and the time it
// gets to be processed (now)
@@ -2848,11 +2847,10 @@
private final Object mCurrentRcLock = new Object();
/**
* The one remote control client to be polled for display information.
- * This object is never null, but its reference might.
+ * This object may be null.
* Access protected by mCurrentRcLock.
*/
- private SoftReference<IRemoteControlClient> mCurrentRcClientRef =
- new SoftReference<IRemoteControlClient>(null);
+ private IRemoteControlClient mCurrentRcClient = null;
private final static int RC_INFO_NONE = 0;
private final static int RC_INFO_ALL =
@@ -2868,8 +2866,9 @@
private int mCurrentRcClientInfoFlags = RC_INFO_ALL;
/**
- * A monotonically increasing generation counter for mCurrentRcClientRef.
+ * A monotonically increasing generation counter for mCurrentRcClient.
* Only accessed with a lock on mCurrentRcLock.
+ * No value wrap-around issues as we only act on equal values.
*/
private int mCurrentRcClientGen = 0;
@@ -2885,7 +2884,7 @@
public IRemoteControlClient getRemoteControlClient(int rcClientId) {
synchronized(mCurrentRcLock) {
if (rcClientId == mCurrentRcClientGen) {
- return mCurrentRcClientRef.get();
+ return mCurrentRcClient;
} else {
return null;
}
@@ -2945,13 +2944,13 @@
public int mCallingUid;
/** provides access to the information to display on the remote control */
- public SoftReference<IRemoteControlClient> mRcClientRef;
+ public IRemoteControlClient mRcClient;
public RcClientDeathHandler mRcClientDeathHandler;
public RemoteControlStackEntry(ComponentName r) {
mReceiverComponent = r;
mCallingUid = -1;
- mRcClientRef = new SoftReference<IRemoteControlClient>(null);
+ mRcClient = null;
}
public void unlinkToRcClientDeath() {
@@ -2986,7 +2985,7 @@
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
pw.println(" receiver: " + rcse.mReceiverComponent +
- " -- client: " + rcse.mRcClientRef.get() +
+ " -- client: " + rcse.mRcClient +
" -- uid: " + rcse.mCallingUid);
}
}
@@ -3105,7 +3104,7 @@
*/
private void clearRemoteControlDisplay() {
synchronized(mCurrentRcLock) {
- mCurrentRcClientRef.clear();
+ mCurrentRcClient = null;
mCurrentRcClientInfoFlags = RC_INFO_NONE;
}
mAudioHandler.sendMessage( mAudioHandler.obtainMessage(MSG_RCDISPLAY_CLEAR) );
@@ -3120,18 +3119,17 @@
RemoteControlStackEntry rcse = mRCStack.peek();
// this is where we enforce opt-in for information display on the remote controls
// with the new AudioManager.registerRemoteControlClient() API
- if (rcse.mRcClientRef.get() == null) {
- // FIXME remove log before release: this warning will be displayed for every AF change
- Log.w(TAG, "Can't update remote control display with null remote control client");
+ if (rcse.mRcClient == null) {
+ //Log.w(TAG, "Can't update remote control display with null remote control client");
clearRemoteControlDisplay();
return;
}
synchronized(mCurrentRcLock) {
- if (!rcse.mRcClientRef.get().equals(mCurrentRcClientRef.get())) {
+ if (!rcse.mRcClient.equals(mCurrentRcClient)) {
// new RC client, assume every type of information shall be queried
mCurrentRcClientInfoFlags = RC_INFO_ALL;
}
- mCurrentRcClientRef = rcse.mRcClientRef;
+ mCurrentRcClient = rcse.mRcClient;
}
mAudioHandler.sendMessage( mAudioHandler.obtainMessage(MSG_RCDISPLAY_UPDATE, 0, 0, rcse) );
}
@@ -3209,7 +3207,7 @@
rcse.unlinkToRcClientDeath();
}
// save the new remote control client
- rcse.mRcClientRef = new SoftReference<IRemoteControlClient>(rcClient);
+ rcse.mRcClient = rcClient;
rcse.mCallingPackageName = callingPackageName;
rcse.mCallingUid = Binder.getCallingUid();
if (rcClient == null) {
@@ -3224,7 +3222,7 @@
} catch (RemoteException e) {
// remote control client is DOA, disqualify it
Log.w(TAG, "registerRemoteControlClient() has a dead client " + b);
- rcse.mRcClientRef.clear();
+ rcse.mRcClient = null;
}
rcse.mRcClientDeathHandler = rcdh;
break;
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 1bacdbb..434ef14 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -607,13 +607,13 @@
/**
* Sets the {@link SurfaceHolder} to use for displaying the video
- * portion of the media. A surface must be set if a display is
- * needed. Not calling this method when playing back a video will
- * result in only the audio track being played.
+ * portion of the media.
*
* Either a surface holder or surface must be set if a display or video sink
* is needed. Not calling this method or {@link #setTexture(SurfaceTexture)}
* when playing back a video will result in only the audio track being played.
+ * A null surface holder or surface will result in only the audio track being
+ * played.
*
* @param sh the SurfaceHolder to use for video display
*/
@@ -634,6 +634,7 @@
* the media. This is similar to {@link #setDisplay(SurfaceHolder)}, but does not
* support {@link #setScreenOnWhilePlaying(boolean)} or {@link #updateSurfaceScreenOn()}.
* Setting a Surface will un-set any Surface or SurfaceHolder that was previously set.
+ * A null surface will result in only the audio track being played.
*
* @param surface The {@link Surface} to be used for the video portion of the media.
*
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 5663683..9090daa 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -247,9 +247,8 @@
static void setVideoSurfaceOrSurfaceTexture(
const sp<MediaPlayer>& mp, JNIEnv *env, jobject thiz, const char *prefix)
{
- // The Java MediaPlayer class makes sure that at most one of mSurface and
- // mParcelSurfaceTexture is non-null. But just in case, we give priority to
- // mSurface over mParcelSurfaceTexture.
+ // Both mSurface and mParcelSurfaceTexture could be null.
+ // We give priority to mSurface over mParcelSurfaceTexture.
jobject surface = env->GetObjectField(thiz, fields.surface);
if (surface != NULL) {
sp<Surface> native_surface(get_surface(env, surface));
@@ -263,6 +262,8 @@
ParcelSurfaceTexture_getISurfaceTexture(env, parcelSurfaceTexture));
LOGV("%s: texture=%p", prefix, native_surfaceTexture.get());
mp->setVideoSurfaceTexture(native_surfaceTexture);
+ } else {
+ mp->setVideoSurfaceTexture(NULL);
}
}
}
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 67f6c79..9c9bc2d 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1157,6 +1157,8 @@
mSurface.clear();
if (surfaceTexture != NULL) {
setNativeWindow_l(new SurfaceTextureClient(surfaceTexture));
+ } else {
+ setNativeWindow_l(NULL);
}
}
@@ -1769,7 +1771,8 @@
}
}
- if (mVideoRendererIsPreview || mVideoRenderer == NULL) {
+ if ((mNativeWindow != NULL)
+ && (mVideoRendererIsPreview || mVideoRenderer == NULL)) {
mVideoRendererIsPreview = false;
initRenderer_l();
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
index 9a51d5e..5b4bce2 100644
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ b/wifi/java/android/net/wifi/WifiConfigStore.java
@@ -954,7 +954,7 @@
netId,
WifiConfiguration.pskVarName,
config.preSharedKey)) {
- Log.d(TAG, "failed to set psk: "+config.preSharedKey);
+ Log.d(TAG, "failed to set psk");
break setVariables;
}