Merge "update connect status along with stream_configuration_change event."
This commit is contained in:
@@ -188,6 +188,17 @@ public final class TvInputHardwareInfo implements Parcelable {
|
|||||||
mCableConnectionStatus = source.readInt();
|
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 {
|
public static final class Builder {
|
||||||
private Integer mDeviceId = null;
|
private Integer mDeviceId = null;
|
||||||
private Integer mType = null;
|
private Integer mType = null;
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ final class TvInputHal implements Handler.Callback {
|
|||||||
public interface Callback {
|
public interface Callback {
|
||||||
void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs);
|
void onDeviceAvailable(TvInputHardwareInfo info, TvStreamConfig[] configs);
|
||||||
void onDeviceUnavailable(int deviceId);
|
void onDeviceUnavailable(int deviceId);
|
||||||
void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs);
|
void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs,
|
||||||
|
int cableConnectionStatus);
|
||||||
void onFirstFrameCaptured(int deviceId, int streamId);
|
void onFirstFrameCaptured(int deviceId, int streamId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,8 +143,9 @@ final class TvInputHal implements Handler.Callback {
|
|||||||
mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget();
|
mHandler.obtainMessage(EVENT_DEVICE_UNAVAILABLE, deviceId, 0).sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void streamConfigsChangedFromNative(int deviceId) {
|
private void streamConfigsChangedFromNative(int deviceId, int cableConnectionStatus) {
|
||||||
mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId, 0).sendToTarget();
|
mHandler.obtainMessage(EVENT_STREAM_CONFIGURATION_CHANGED, deviceId,
|
||||||
|
cableConnectionStatus).sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void firstFrameCapturedFromNative(int deviceId, int streamId) {
|
private void firstFrameCapturedFromNative(int deviceId, int streamId) {
|
||||||
@@ -184,6 +186,7 @@ final class TvInputHal implements Handler.Callback {
|
|||||||
case EVENT_STREAM_CONFIGURATION_CHANGED: {
|
case EVENT_STREAM_CONFIGURATION_CHANGED: {
|
||||||
TvStreamConfig[] configs;
|
TvStreamConfig[] configs;
|
||||||
int deviceId = msg.arg1;
|
int deviceId = msg.arg1;
|
||||||
|
int cableConnectionStatus = msg.arg2;
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId);
|
Slog.d(TAG, "EVENT_STREAM_CONFIGURATION_CHANGED: deviceId = " + deviceId);
|
||||||
@@ -191,7 +194,7 @@ final class TvInputHal implements Handler.Callback {
|
|||||||
retrieveStreamConfigsLocked(deviceId);
|
retrieveStreamConfigsLocked(deviceId);
|
||||||
configs = mStreamConfigs.get(deviceId);
|
configs = mStreamConfigs.get(deviceId);
|
||||||
}
|
}
|
||||||
mCallback.onStreamConfigurationChanged(deviceId, configs);
|
mCallback.onStreamConfigurationChanged(deviceId, configs, cableConnectionStatus);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
Connection connection = new Connection(info);
|
Connection connection = new Connection(info);
|
||||||
connection.updateConfigsLocked(configs);
|
connection.updateConfigsLocked(configs);
|
||||||
|
connection.updateCableConnectionStatusLocked(info.getCableConnectionStatus());
|
||||||
mConnections.put(info.getDeviceId(), connection);
|
mConnections.put(info.getDeviceId(), connection);
|
||||||
buildHardwareListLocked();
|
buildHardwareListLocked();
|
||||||
mHandler.obtainMessage(
|
mHandler.obtainMessage(
|
||||||
@@ -202,7 +203,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs) {
|
public void onStreamConfigurationChanged(int deviceId, TvStreamConfig[] configs,
|
||||||
|
int cableConnectionStatus) {
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
Connection connection = mConnections.get(deviceId);
|
Connection connection = mConnections.get(deviceId);
|
||||||
if (connection == null) {
|
if (connection == null) {
|
||||||
@@ -211,12 +213,22 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int previousConfigsLength = connection.getConfigsLengthLocked();
|
int previousConfigsLength = connection.getConfigsLengthLocked();
|
||||||
|
int previousCableConnectionStatus = connection.getInputStateLocked();
|
||||||
connection.updateConfigsLocked(configs);
|
connection.updateConfigsLocked(configs);
|
||||||
String inputId = mHardwareInputIdMap.get(deviceId);
|
String inputId = mHardwareInputIdMap.get(deviceId);
|
||||||
if (inputId != null
|
if (inputId != null) {
|
||||||
&& (previousConfigsLength == 0) != (connection.getConfigsLengthLocked() == 0)) {
|
if (connection.updateCableConnectionStatusLocked(cableConnectionStatus)) {
|
||||||
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
if (previousCableConnectionStatus != connection.getInputStateLocked()) {
|
||||||
connection.getInputStateLocked(), 0, inputId).sendToTarget();
|
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();
|
ITvInputHardwareCallback callback = connection.getCallbackLocked();
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
@@ -624,7 +636,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class Connection implements IBinder.DeathRecipient {
|
private class Connection implements IBinder.DeathRecipient {
|
||||||
private final TvInputHardwareInfo mHardwareInfo;
|
private TvInputHardwareInfo mHardwareInfo;
|
||||||
private TvInputInfo mInfo;
|
private TvInputInfo mInfo;
|
||||||
private TvInputHardwareImpl mHardware = null;
|
private TvInputHardwareImpl mHardware = null;
|
||||||
private ITvInputHardwareCallback mCallback;
|
private ITvInputHardwareCallback mCallback;
|
||||||
@@ -633,6 +645,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
private Integer mResolvedUserId = null;
|
private Integer mResolvedUserId = null;
|
||||||
private Runnable mOnFirstFrameCaptured;
|
private Runnable mOnFirstFrameCaptured;
|
||||||
private ResourceClientProfile mResourceClientProfile = null;
|
private ResourceClientProfile mResourceClientProfile = null;
|
||||||
|
private boolean mIsCableConnectionStatusUpdated = false;
|
||||||
|
|
||||||
public Connection(TvInputHardwareInfo hardwareInfo) {
|
public Connection(TvInputHardwareInfo hardwareInfo) {
|
||||||
mHardwareInfo = hardwareInfo;
|
mHardwareInfo = hardwareInfo;
|
||||||
@@ -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() {
|
private int getConfigsLengthLocked() {
|
||||||
return mConfigs == null ? 0 : mConfigs.length;
|
return mConfigs == null ? 0 : mConfigs.length;
|
||||||
}
|
}
|
||||||
@@ -742,7 +766,9 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
private int getInputStateLocked() {
|
private int getInputStateLocked() {
|
||||||
int configsLength = getConfigsLengthLocked();
|
int configsLength = getConfigsLengthLocked();
|
||||||
if (configsLength > 0) {
|
if (configsLength > 0) {
|
||||||
return INPUT_STATE_CONNECTED;
|
if (!mIsCableConnectionStatusUpdated) {
|
||||||
|
return INPUT_STATE_CONNECTED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
switch (mHardwareInfo.getCableConnectionStatus()) {
|
switch (mHardwareInfo.getCableConnectionStatus()) {
|
||||||
case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED:
|
case TvInputHardwareInfo.CABLE_CONNECTION_STATUS_CONNECTED:
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ public:
|
|||||||
|
|
||||||
void onDeviceAvailable(const TvInputDeviceInfo& info);
|
void onDeviceAvailable(const TvInputDeviceInfo& info);
|
||||||
void onDeviceUnavailable(int deviceId);
|
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);
|
void onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -519,7 +519,7 @@ void JTvInputHal::onDeviceUnavailable(int deviceId) {
|
|||||||
deviceId);
|
deviceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JTvInputHal::onStreamConfigurationsChanged(int deviceId) {
|
void JTvInputHal::onStreamConfigurationsChanged(int deviceId, int cableConnectionStatus) {
|
||||||
{
|
{
|
||||||
Mutex::Autolock autoLock(&mLock);
|
Mutex::Autolock autoLock(&mLock);
|
||||||
KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId);
|
KeyedVector<int, Connection>& connections = mConnections.editValueFor(deviceId);
|
||||||
@@ -529,10 +529,8 @@ void JTvInputHal::onStreamConfigurationsChanged(int deviceId) {
|
|||||||
connections.clear();
|
connections.clear();
|
||||||
}
|
}
|
||||||
JNIEnv* env = AndroidRuntime::getJNIEnv();
|
JNIEnv* env = AndroidRuntime::getJNIEnv();
|
||||||
env->CallVoidMethod(
|
env->CallVoidMethod(mThiz, gTvInputHalClassInfo.streamConfigsChanged, deviceId,
|
||||||
mThiz,
|
cableConnectionStatus);
|
||||||
gTvInputHalClassInfo.streamConfigsChanged,
|
|
||||||
deviceId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) {
|
void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) {
|
||||||
@@ -572,7 +570,8 @@ void JTvInputHal::NotifyHandler::handleMessage(const Message& message) {
|
|||||||
mHal->onDeviceUnavailable(mEvent.deviceInfo.deviceId);
|
mHal->onDeviceUnavailable(mEvent.deviceInfo.deviceId);
|
||||||
} break;
|
} break;
|
||||||
case TvInputEventType::STREAM_CONFIGURATIONS_CHANGED: {
|
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;
|
} break;
|
||||||
default:
|
default:
|
||||||
ALOGE("Unrecognizable event");
|
ALOGE("Unrecognizable event");
|
||||||
@@ -688,9 +687,8 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) {
|
|||||||
"deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V");
|
"deviceAvailableFromNative", "(Landroid/media/tv/TvInputHardwareInfo;)V");
|
||||||
GET_METHOD_ID(
|
GET_METHOD_ID(
|
||||||
gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V");
|
gTvInputHalClassInfo.deviceUnavailable, clazz, "deviceUnavailableFromNative", "(I)V");
|
||||||
GET_METHOD_ID(
|
GET_METHOD_ID(gTvInputHalClassInfo.streamConfigsChanged, clazz,
|
||||||
gTvInputHalClassInfo.streamConfigsChanged, clazz,
|
"streamConfigsChangedFromNative", "(II)V");
|
||||||
"streamConfigsChangedFromNative", "(I)V");
|
|
||||||
GET_METHOD_ID(
|
GET_METHOD_ID(
|
||||||
gTvInputHalClassInfo.firstFrameCaptured, clazz,
|
gTvInputHalClassInfo.firstFrameCaptured, clazz,
|
||||||
"firstFrameCapturedFromNative", "(II)V");
|
"firstFrameCapturedFromNative", "(II)V");
|
||||||
|
|||||||
Reference in New Issue
Block a user