diff options
author | Joey Grover <joeygrover@gmail.com> | 2019-11-04 14:44:22 -0500 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2019-11-04 14:44:22 -0500 |
commit | 98d80bb46666e4133db685533bbb78c387c0b299 (patch) | |
tree | 49c62d4945bdb7bb155eb02a274d03b0b248b03d | |
parent | 89f5c6f8a7ca212bd7b202a46a5c11c6c8bff54a (diff) | |
download | sdl_android-hotfix/issue_1110.tar.gz |
Fix #1110hotfix/issue_1110
4 files changed, 61 insertions, 25 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java index 4563d8295..27a7c9dea 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java @@ -737,13 +737,18 @@ public class SdlManager extends BaseSdlManager{ @Override public void startVideoService(VideoStreamingParameters parameters, boolean encrypted) { if(proxy.getIsConnected()){ - proxy.startVideoStream(encrypted,parameters); + proxy.startVideoService(encrypted,parameters); } } @Override public IVideoStreamListener startVideoStream(boolean isEncrypted, VideoStreamingParameters parameters){ - return proxy.startVideoStream(isEncrypted, parameters); + if(proxy.getIsConnected()){ + return proxy.startVideoStream(isEncrypted, parameters); + }else{ + DebugTool.logError("Unable to start video stream, proxy not connected"); + return null; + } } @Override diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java index 95144865e..bb257b915 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java @@ -69,6 +69,7 @@ import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; import com.smartdevicelink.streaming.video.SdlRemoteDisplay; import com.smartdevicelink.streaming.video.VideoStreamingParameters; import com.smartdevicelink.transport.utl.TransportRecord; +import com.smartdevicelink.util.DebugTool; import com.smartdevicelink.util.Version; import java.lang.ref.WeakReference; @@ -101,12 +102,13 @@ public class VideoStreamManager extends BaseVideoStreamManager { @Override public void onServiceStarted(SdlSession session, SessionType type, boolean isEncrypted) { if(SessionType.NAV.equals(type)){ - if(session != null && session.getAcceptedVideoParams() != null){ + if (session != null && session.getAcceptedVideoParams() != null) { parameters = session.getAcceptedVideoParams(); + VideoStreamManager.this.streamListener = session.startVideoStream(); } - VideoStreamManager.this.streamListener = internalInterface.startVideoStream(isEncrypted, parameters); - if(streamListener == null){ - Log.e(TAG, "Error starting video service"); + + if (VideoStreamManager.this.streamListener == null) { + Log.e(TAG, "Error starting video stream"); stateMachine.transitionToState(StreamingStateMachine.ERROR); return; } @@ -132,6 +134,7 @@ public class VideoStreamManager extends BaseVideoStreamManager { @Override public void onServiceError(SdlSession session, SessionType type, String reason) { + DebugTool.logError("Unable to start video service: " + reason); stateMachine.transitionToState(StreamingStateMachine.ERROR); transitionToState(BaseSubManager.ERROR); } @@ -302,7 +305,6 @@ public class VideoStreamManager extends BaseVideoStreamManager { //Start the video service this.internalInterface.startVideoService(parameters, encrypted); - } /** @@ -477,10 +479,14 @@ public class VideoStreamManager extends BaseVideoStreamManager { } } )); Thread showPresentation = new Thread(fTask); + showPresentation.setName("RmtDispThread"); showPresentation.start(); } catch (Exception ex) { Log.e(TAG, "Unable to create Virtual Display."); + if(DebugTool.isDebugEnabled()){ + ex.printStackTrace(); + } } } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java index 30ebb6cb5..02a44a96f 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java @@ -5296,6 +5296,27 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase> }
}
+ /**
+ * This method will try to start the video service with the requested parameters.
+ * When it returns it will attempt to store the accepted parameters if available.
+ * @param isEncrypted if the service should be encrypted
+ * @param parameters the desiered video streaming parameters
+ */
+ public void startVideoService(boolean isEncrypted, VideoStreamingParameters parameters) {
+ if (sdlSession == null) {
+ DebugTool.logWarning("SdlSession is not created yet.");
+ return;
+ }
+ if (!sdlSession.getIsConnected()) {
+ DebugTool.logWarning("Connection is not available.");
+ return;
+ }
+
+ sdlSession.setDesiredVideoParams(parameters);
+
+ tryStartVideoStream(isEncrypted, parameters);
+ }
+
/**
*Closes the opened video service (serviceType 11)
*@return true if the video service is closed successfully, return false otherwise
diff --git a/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java b/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java index 55167df99..db342de39 100644 --- a/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java +++ b/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java @@ -1046,27 +1046,31 @@ public class SdlProtocolBase { } } } else { - TransportRecord transportRecord = packet.getTransportRecord(); - if(transportRecord == null || (requiresHighBandwidth - && TransportType.BLUETOOTH.equals(transportRecord.getType()))){ - //transport can't support high bandwidth - onTransportNotAccepted((transportRecord != null ? transportRecord.getType().toString() : "Transport") + "can't support high bandwidth requirement, and secondary transport not supported in this protocol version"); - return; - } - //If version < 5 and transport is acceptable we need to just add these - activeTransports.put(SessionType.RPC, transportRecord); - activeTransports.put(SessionType.BULK_DATA, transportRecord); - activeTransports.put(SessionType.CONTROL, transportRecord); - activeTransports.put(SessionType.NAV, transportRecord); - activeTransports.put(SessionType.PCM, transportRecord); - - if (protocolVersion.getMajor() > 1){ - if (packet.payload!= null && packet.dataSize == 4){ //hashid will be 4 bytes in length - hashID = BitConverter.intFromByteArray(packet.payload, 0); + if(serviceType.equals(SessionType.RPC)) { + TransportRecord transportRecord = packet.getTransportRecord(); + if (transportRecord == null || (requiresHighBandwidth + && TransportType.BLUETOOTH.equals(transportRecord.getType()))) { + //transport can't support high bandwidth + onTransportNotAccepted((transportRecord != null ? transportRecord.getType().toString() : "Transport ") + "can't support high bandwidth requirement, and secondary transport not supported in this protocol version"); + return; } + //If version < 5 and transport is acceptable we need to just add these + activeTransports.put(SessionType.RPC, transportRecord); + activeTransports.put(SessionType.BULK_DATA, transportRecord); + activeTransports.put(SessionType.CONTROL, transportRecord); + activeTransports.put(SessionType.NAV, transportRecord); + activeTransports.put(SessionType.PCM, transportRecord); + + if (protocolVersion.getMajor() > 1) { + if (packet.payload != null && packet.dataSize == 4) { //hashid will be 4 bytes in length + hashID = BitConverter.intFromByteArray(packet.payload, 0); + } + } + }else if(serviceType.equals(SessionType.NAV)) { + //Protocol versions <5 don't support param negotiation + iSdlProtocol.setAcceptedVideoParams(iSdlProtocol.getDesiredVideoParams()); } } - iSdlProtocol.onProtocolSessionStarted(serviceType, (byte) packet.getSessionId(), (byte)protocolVersion.getMajor(), "", hashID, packet.isEncrypted()); } |