Loading media/java/android/media/tv/TvInputHardwareInfo.java +11 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,17 @@ public final class TvInputHardwareInfo implements Parcelable { mCableConnectionStatus = source.readInt(); } /** @hide */ public Builder toBuilder() { return new Builder() .deviceId(mDeviceId) .type(mType) .audioType(mAudioType) .audioAddress(mAudioAddress) .hdmiPortId(mHdmiPortId) .cableConnectionStatus(mCableConnectionStatus); } public static final class Builder { private Integer mDeviceId = null; private Integer mType = null; Loading services/core/java/com/android/server/tv/TvInputHal.java +7 −4 Original line number Diff line number Diff line Loading @@ -51,7 +51,8 @@ final class TvInputHal implements Handler.Callback { public interface Callback { void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs); void onDeviceUnavailable(int deviceId); void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs); void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs, int cableConnectionStatus); void onFirstFrameCaptured(int deviceId, int streamId); } Loading Loading @@ -142,8 +143,9 @@ final class TvInputHal implements Handler.Callback { mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget(); } private void streamConfigsChangedFromNative(int deviceId) { mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, 0).sendToTarget(); private void streamConfigsChangedFromNative(int deviceId, int cableConnectionStatus) { mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, cableConnectionStatus).sendToTarget(); } private void firstFrameCapturedFromNative(int deviceId, int streamId) { Loading Loading @@ -184,6 +186,7 @@ final class TvInputHal implements Handler.Callback { case EVENT_STREAM_CONFIGURATION_CHANGED: { TvStreamConfig[] configs; int deviceId = msg.arg1; int cableConnectionStatus = msg.arg2; synchronized (mLock) { if (DEBUG) { Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId); Loading @@ -191,7 +194,7 @@ final class TvInputHal implements Handler.Callback { retrieveStreamConfigsLocked(deviceId); configs = mStreamConfigs.get(deviceId); } mCallback.onStreamConfigurationChanged(deviceId, configs); mCallback.onStreamConfigurationChanged(deviceId, configs, cableConnectionStatus); break; } Loading services/core/java/com/android/server/tv/TvInputHardwareManager.java +33 −7 Original line number Diff line number Diff line Loading @@ -156,6 +156,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { synchronized (mLock) { Connection connection = new Connection(info); connection.updateConfigsLocked(configs); connection.updateCableConnectionStatusLocked(info.getCableConnectionStatus()); mConnections.put(info.getDeviceId(), connection); buildHardwareListLocked(); mHandler.obtainMessage( Loading Loading @@ -202,7 +203,8 @@ class TvInputHardwareManager implements TvInputHal.Callback { } @Override public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs) { public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs, int cableConnectionStatus) { synchronized (mLock) { Connection connection = mConnections.get(deviceId); if (connection == null) { Loading @@ -211,13 +213,23 @@ class TvInputHardwareManager implements TvInputHal.Callback { return; } int previousConfigsLength = connection.getConfigsLengthLocked(); int previousCableConnectionStatus = connection.getInputStateLocked(); connection.updateConfigsLocked(configs); String inputId = mHardwareInputIdMap.get(deviceId); if (inputId != null && (previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) { if (inputId != null) { if (connection.updateCableConnectionStatusLocked(cableConnectionStatus)) { if (previousCableConnectionStatus != connection.getInputStateLocked()) { mHandler.obtainMessage(ListenerHandler.STATE_CHANGED, connection.getInputStateLocked(), 0, inputId).sendToTarget(); } } else { if ((previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) { mHandler.obtainMessage(ListenerHandler.STATE_CHANGED, connection.getInputStateLocked(), 0, inputId).sendToTarget(); } } } ITvInputHardwareCallback callback = connection.getCallbackLocked(); if (callback != null) { try { Loading Loading @@ -624,7 +636,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { } private class Connection implements IBinder.DeathRecipient { private final TvInputHardwareInfo mHardwareInfo; private TvInputHardwareInfo mHardwareInfo; private TvInputInfo mInfo; private TvInputHardwareImpl mHardware = null; private ITvInputHardwareCallback mCallback; Loading @@ -633,6 +645,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { private Integer mResolvedUserId = null; private Runnable mOnFirstFrameCaptured; private ResourceClientProfile mResourceClientProfile = null; private boolean mIsCableConnectionStatusUpdated = false; public Connection(TvInputHardwareInfo hardwareInfo) { mHardwareInfo = hardwareInfo; Loading Loading @@ -735,6 +748,17 @@ class TvInputHardwareManager implements TvInputHal.Callback { + " }"; } public boolean updateCableConnectionStatusLocked(int cableConnectionStatus) { // Update connection status only if it's not default value if (cableConnectionStatus != TvInputHardwareInfo.CABLE_CONNECTION_STATUS_UNKNOWN || mIsCableConnectionStatusUpdated) { mIsCableConnectionStatusUpdated = true; mHardwareInfo = mHardwareInfo.toBuilder() .cableConnectionStatus(cableConnectionStatus).build(); } return mIsCableConnectionStatusUpdated; } private int getConfigsLengthLocked() { return mConfigs == null ? 0 : mConfigs.length; } Loading @@ -742,8 +766,10 @@ class TvInputHardwareManager implements TvInputHal.Callback { private int getInputStateLocked() { int configsLength = getConfigsLengthLocked(); if (configsLength > 0) { if (!mIsCableConnectionStatusUpdated) { return INPUT_STATE_CONNECTED; } } switch (mHardwareInfo.getCableConnectionStatus()) { case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED: return INPUT_STATE_CONNECTED; Loading services/core/jni/com_android_server_tv_TvInputHal.cpp +8 −10 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ public: void onDeviceAvailable(const TvInputDeviceInfo& info); void onDeviceUnavailable(int deviceId); void onStreamConfigurationsChanged(int deviceId); void onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus); void onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded); private: Loading Loading @@ -519,7 +519,7 @@ void JTvInputHal::onDeviceUnavailable(int deviceId) { deviceId); } void JTvInputHal::onStreamConfigurationsChanged(int deviceId) { void JTvInputHal::onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus) { { Mutex::Autolock autoLock(&mLock); KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId); Loading @@ -529,10 +529,8 @@ void JTvInputHal::onStreamConfigurationsChanged(int deviceId) { connections.clear(); } JNIEnv* env = AndroidRuntime::getJNIEnv(); env->CallVoidMethod( mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId); env->CallVoidMethod(mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId, cableConnectionStatus); } void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) { Loading Loading @@ -572,7 +570,8 @@ void JTvInputHal::NotifyHandler::handleMessage(const Message& message) { mHal->onDeviceUnavailable(mEvent.deviceInfo.deviceId); } break; case TvInputEventType::STREAM_CONFIGURATIONS_CHANGED: { mHal->onStreamConfigurationsChanged(mEvent.deviceInfo.deviceId); int cableConnectionStatus = static_cast<int>(mEvent.deviceInfo.cableConnectionStatus); mHal->onStreamConfigurationsChanged(mEvent.deviceInfo.deviceId, cableConnectionStatus); } break; default: ALOGE("Unrecognizable event"); Loading Loading @@ -688,9 +687,8 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { "deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V"); GET_METHOD_ID( gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V"); GET_METHOD_ID( gTvInputHalClassInfo.streamConfigsChanged, clazz, "streamConfigsChangedFromNative", "(I)V"); GET_METHOD_ID(gTvInputHalClassInfo.streamConfigsChanged, clazz, "streamConfigsChangedFromNative", "(II)V"); GET_METHOD_ID( gTvInputHalClassInfo.firstFrameCaptured, clazz, "firstFrameCapturedFromNative", "(II)V"); Loading Loading
media/java/android/media/tv/TvInputHardwareInfo.java +11 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,17 @@ public final class TvInputHardwareInfo implements Parcelable { mCableConnectionStatus = source.readInt(); } /** @hide */ public Builder toBuilder() { return new Builder() .deviceId(mDeviceId) .type(mType) .audioType(mAudioType) .audioAddress(mAudioAddress) .hdmiPortId(mHdmiPortId) .cableConnectionStatus(mCableConnectionStatus); } public static final class Builder { private Integer mDeviceId = null; private Integer mType = null; Loading
services/core/java/com/android/server/tv/TvInputHal.java +7 −4 Original line number Diff line number Diff line Loading @@ -51,7 +51,8 @@ final class TvInputHal implements Handler.Callback { public interface Callback { void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs); void onDeviceUnavailable(int deviceId); void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs); void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs, int cableConnectionStatus); void onFirstFrameCaptured(int deviceId, int streamId); } Loading Loading @@ -142,8 +143,9 @@ final class TvInputHal implements Handler.Callback { mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget(); } private void streamConfigsChangedFromNative(int deviceId) { mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, 0).sendToTarget(); private void streamConfigsChangedFromNative(int deviceId, int cableConnectionStatus) { mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, cableConnectionStatus).sendToTarget(); } private void firstFrameCapturedFromNative(int deviceId, int streamId) { Loading Loading @@ -184,6 +186,7 @@ final class TvInputHal implements Handler.Callback { case EVENT_STREAM_CONFIGURATION_CHANGED: { TvStreamConfig[] configs; int deviceId = msg.arg1; int cableConnectionStatus = msg.arg2; synchronized (mLock) { if (DEBUG) { Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId); Loading @@ -191,7 +194,7 @@ final class TvInputHal implements Handler.Callback { retrieveStreamConfigsLocked(deviceId); configs = mStreamConfigs.get(deviceId); } mCallback.onStreamConfigurationChanged(deviceId, configs); mCallback.onStreamConfigurationChanged(deviceId, configs, cableConnectionStatus); break; } Loading
services/core/java/com/android/server/tv/TvInputHardwareManager.java +33 −7 Original line number Diff line number Diff line Loading @@ -156,6 +156,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { synchronized (mLock) { Connection connection = new Connection(info); connection.updateConfigsLocked(configs); connection.updateCableConnectionStatusLocked(info.getCableConnectionStatus()); mConnections.put(info.getDeviceId(), connection); buildHardwareListLocked(); mHandler.obtainMessage( Loading Loading @@ -202,7 +203,8 @@ class TvInputHardwareManager implements TvInputHal.Callback { } @Override public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs) { public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs, int cableConnectionStatus) { synchronized (mLock) { Connection connection = mConnections.get(deviceId); if (connection == null) { Loading @@ -211,13 +213,23 @@ class TvInputHardwareManager implements TvInputHal.Callback { return; } int previousConfigsLength = connection.getConfigsLengthLocked(); int previousCableConnectionStatus = connection.getInputStateLocked(); connection.updateConfigsLocked(configs); String inputId = mHardwareInputIdMap.get(deviceId); if (inputId != null && (previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) { if (inputId != null) { if (connection.updateCableConnectionStatusLocked(cableConnectionStatus)) { if (previousCableConnectionStatus != connection.getInputStateLocked()) { mHandler.obtainMessage(ListenerHandler.STATE_CHANGED, connection.getInputStateLocked(), 0, inputId).sendToTarget(); } } else { if ((previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) { mHandler.obtainMessage(ListenerHandler.STATE_CHANGED, connection.getInputStateLocked(), 0, inputId).sendToTarget(); } } } ITvInputHardwareCallback callback = connection.getCallbackLocked(); if (callback != null) { try { Loading Loading @@ -624,7 +636,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { } private class Connection implements IBinder.DeathRecipient { private final TvInputHardwareInfo mHardwareInfo; private TvInputHardwareInfo mHardwareInfo; private TvInputInfo mInfo; private TvInputHardwareImpl mHardware = null; private ITvInputHardwareCallback mCallback; Loading @@ -633,6 +645,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { private Integer mResolvedUserId = null; private Runnable mOnFirstFrameCaptured; private ResourceClientProfile mResourceClientProfile = null; private boolean mIsCableConnectionStatusUpdated = false; public Connection(TvInputHardwareInfo hardwareInfo) { mHardwareInfo = hardwareInfo; Loading Loading @@ -735,6 +748,17 @@ class TvInputHardwareManager implements TvInputHal.Callback { + " }"; } public boolean updateCableConnectionStatusLocked(int cableConnectionStatus) { // Update connection status only if it's not default value if (cableConnectionStatus != TvInputHardwareInfo.CABLE_CONNECTION_STATUS_UNKNOWN || mIsCableConnectionStatusUpdated) { mIsCableConnectionStatusUpdated = true; mHardwareInfo = mHardwareInfo.toBuilder() .cableConnectionStatus(cableConnectionStatus).build(); } return mIsCableConnectionStatusUpdated; } private int getConfigsLengthLocked() { return mConfigs == null ? 0 : mConfigs.length; } Loading @@ -742,8 +766,10 @@ class TvInputHardwareManager implements TvInputHal.Callback { private int getInputStateLocked() { int configsLength = getConfigsLengthLocked(); if (configsLength > 0) { if (!mIsCableConnectionStatusUpdated) { return INPUT_STATE_CONNECTED; } } switch (mHardwareInfo.getCableConnectionStatus()) { case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED: return INPUT_STATE_CONNECTED; Loading
services/core/jni/com_android_server_tv_TvInputHal.cpp +8 −10 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ public: void onDeviceAvailable(const TvInputDeviceInfo& info); void onDeviceUnavailable(int deviceId); void onStreamConfigurationsChanged(int deviceId); void onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus); void onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded); private: Loading Loading @@ -519,7 +519,7 @@ void JTvInputHal::onDeviceUnavailable(int deviceId) { deviceId); } void JTvInputHal::onStreamConfigurationsChanged(int deviceId) { void JTvInputHal::onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus) { { Mutex::Autolock autoLock(&mLock); KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId); Loading @@ -529,10 +529,8 @@ void JTvInputHal::onStreamConfigurationsChanged(int deviceId) { connections.clear(); } JNIEnv* env = AndroidRuntime::getJNIEnv(); env->CallVoidMethod( mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId); env->CallVoidMethod(mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId, cableConnectionStatus); } void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) { Loading Loading @@ -572,7 +570,8 @@ void JTvInputHal::NotifyHandler::handleMessage(const Message& message) { mHal->onDeviceUnavailable(mEvent.deviceInfo.deviceId); } break; case TvInputEventType::STREAM_CONFIGURATIONS_CHANGED: { mHal->onStreamConfigurationsChanged(mEvent.deviceInfo.deviceId); int cableConnectionStatus = static_cast<int>(mEvent.deviceInfo.cableConnectionStatus); mHal->onStreamConfigurationsChanged(mEvent.deviceInfo.deviceId, cableConnectionStatus); } break; default: ALOGE("Unrecognizable event"); Loading Loading @@ -688,9 +687,8 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) { "deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V"); GET_METHOD_ID( gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V"); GET_METHOD_ID( gTvInputHalClassInfo.streamConfigsChanged, clazz, "streamConfigsChangedFromNative", "(I)V"); GET_METHOD_ID(gTvInputHalClassInfo.streamConfigsChanged, clazz, "streamConfigsChangedFromNative", "(II)V"); GET_METHOD_ID( gTvInputHalClassInfo.firstFrameCaptured, clazz, "firstFrameCapturedFromNative", "(II)V"); Loading