summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2019-11-04 14:44:22 -0500
committerJoey Grover <joeygrover@gmail.com>2019-11-04 14:44:22 -0500
commit98d80bb46666e4133db685533bbb78c387c0b299 (patch)
tree49c62d4945bdb7bb155eb02a274d03b0b248b03d
parent89f5c6f8a7ca212bd7b202a46a5c11c6c8bff54a (diff)
downloadsdl_android-hotfix/issue_1110.tar.gz
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java9
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java16
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java21
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java40
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());
}