Skip to content

Commit 3e608e7

Browse files
authored
Merge pull request #131 from lgcast-dev/master
Disabled ScreenMirroring support for 32bit devices
2 parents dd1e1f0 + 68c766e commit 3e608e7

File tree

6 files changed

+23
-8
lines changed

6 files changed

+23
-8
lines changed

jniLibs/armeabi-v7a/libc++_shared.so

-542 KB
Binary file not shown.
-45.6 KB
Binary file not shown.
-5.82 MB
Binary file not shown.

src/com/connectsdk/service/webos/lgcast/screenmirroring/ScreenMirroringConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ public static class Video {
99
public static final String CODEC = "H264";
1010
public static final int CLOCK_RATE = 90000;
1111
public static final int FRAMERATE = 60;
12-
public static final int BITRATE = 6 * 1024 * 1024;
12+
public static final int BITRATE_1MB = 1500000; // 1.5 * 1024 * 1024 (1,572,864)
13+
public static final int BITRATE_4MB = 4000000; // 4.0 * 1024 * 1024 (4,194,304)
14+
public static final int BITRATE_6MB = 6000000; // 6.0 * 1024 * 1024 (6,291,456)
1315

1416
public static final int DEFAULT_WIDTH = 1920;
1517
public static final int DEFAULT_HEIGHT = 1080;

src/com/connectsdk/service/webos/lgcast/screenmirroring/api/ScreenMirroringApi.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
import android.content.Context;
2323
import android.content.Intent;
2424
import android.hardware.display.DisplayManager;
25+
import android.os.Build;
2526
import android.view.Display;
2627
import com.connectsdk.service.capability.ScreenMirroringControl;
2728
import com.connectsdk.service.capability.ScreenMirroringControl.ScreenMirroringError;
2829
import com.connectsdk.service.capability.ScreenMirroringControl.ScreenMirroringErrorListener;
2930
import com.connectsdk.service.capability.ScreenMirroringControl.ScreenMirroringStartListener;
3031
import com.connectsdk.service.capability.ScreenMirroringControl.ScreenMirroringStopListener;
32+
import com.connectsdk.service.webos.lgcast.common.utils.DeviceUtil;
3133
import com.connectsdk.service.webos.lgcast.common.utils.LocalBroadcastEx;
3234
import com.connectsdk.service.webos.lgcast.common.utils.Logger;
3335
import com.connectsdk.service.webos.lgcast.screenmirroring.ScreenMirroringConfig;
@@ -58,6 +60,7 @@ public void startMirroring(Context context, Intent projectionData, String device
5860
if (context == null || projectionData == null || deviceIpAddress == null) throw new Exception("Invalid arguments");
5961
if (ScreenMirroringControl.isCompatibleOsVersion() == false) throw new Exception("Incompatible OS version");
6062
if (ScreenMirroringControl.isRunning(context) == true) throw new Exception("Screen Mirroring is ALREADY running");
63+
if (DeviceUtil.getProcessorBits() != 64) throw new Exception("Invalid Application Binary Interface");
6164

6265
mLocalBroadcastEx.registerOnce(context, MirroringServiceIF.ACTION_NOTIFY_PAIRING, intent -> {
6366
if (startListener != null) startListener.onPairing();
@@ -76,6 +79,7 @@ public void startMirroring(Context context, Intent projectionData, String device
7679
Logger.debug("Request start");
7780
MirroringServiceIF.requestStart(context, projectionData, deviceIpAddress, secondScreenClass != null);
7881
} catch (Exception e) {
82+
Logger.error(e);
7983
if (startListener != null) startListener.onStart(false, null);
8084
}
8185
}
@@ -102,6 +106,7 @@ public void stopMirroring(Context context, ScreenMirroringStopListener stopListe
102106
Logger.debug("Request stop");
103107
MirroringServiceIF.requestStop(context);
104108
} catch (Exception e) {
109+
Logger.error(e);
105110
if (stopListener != null) stopListener.onStop(false);
106111
}
107112
}

src/com/connectsdk/service/webos/lgcast/screenmirroring/service/MirroringService.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.connectsdk.service.webos.lgcast.common.connection.MobileDescription;
2222
import com.connectsdk.service.webos.lgcast.common.streaming.RTPStreaming;
2323
import com.connectsdk.service.webos.lgcast.common.utils.AppUtil;
24+
import com.connectsdk.service.webos.lgcast.common.utils.DeviceUtil;
2425
import com.connectsdk.service.webos.lgcast.common.utils.HandlerThreadEx;
2526
import com.connectsdk.service.webos.lgcast.common.utils.IOUtil;
2627
import com.connectsdk.service.webos.lgcast.common.utils.Logger;
@@ -33,8 +34,8 @@
3334
import com.connectsdk.service.webos.lgcast.screenmirroring.uibc.UibcAccessibilityService;
3435
import com.lge.lib.lgcast.iface.AudioCaptureIF;
3536
import com.lge.lib.lgcast.iface.CaptureStatus;
36-
import com.lge.lib.lgcast.iface.VideoCaptureIF;
3737
import com.lge.lib.lgcast.iface.MasterKeyFactoryIF;
38+
import com.lge.lib.lgcast.iface.VideoCaptureIF;
3839
import org.json.JSONObject;
3940

4041
public class MirroringService extends Service {
@@ -327,11 +328,21 @@ private boolean startCaptureAndStreaming(Intent intent) {
327328
Logger.print("startCaptureAndStreaming");
328329

329330
try {
331+
Point captureSizeInLandscape = MirroringServiceFunc.getCaptureSizeInLandscape(this);
332+
int width = captureSizeInLandscape.x;
333+
int height = captureSizeInLandscape.y;
334+
int bitrate = ScreenMirroringConfig.Video.BITRATE_6MB;
335+
336+
float totalMemoryGB = DeviceUtil.getTotalMemorySpace(this) / 1024F / 1024F / 1024F;
337+
if (totalMemoryGB <= 3.0) bitrate = ScreenMirroringConfig.Video.BITRATE_1MB;
338+
else if (totalMemoryGB <= 4.0) bitrate = ScreenMirroringConfig.Video.BITRATE_4MB;
339+
Logger.error("### width=%d, height=%d, totalMemory=%f, bitrate=%d ###", width, height, totalMemoryGB, bitrate);
340+
330341
mMediaProjection = MirroringServiceFunc.getMediaProjection(this, intent);
331342
if (mMediaProjection == null) throw new Exception("Invalid projection");
332343

333344
mRTPStreaming = new RTPStreaming();
334-
mRTPStreaming.setStreamingConfig(MirroringServiceFunc.createRtpVideoConfig(ScreenMirroringConfig.Video.BITRATE), MirroringServiceFunc.createRtpAudioConfig(), MirroringServiceFunc.createRtpSecurityConfig(mMirroringSourceCapability.masterKeys));
345+
mRTPStreaming.setStreamingConfig(MirroringServiceFunc.createRtpVideoConfig(bitrate), MirroringServiceFunc.createRtpAudioConfig(), MirroringServiceFunc.createRtpSecurityConfig(mMirroringSourceCapability.masterKeys));
335346
mRTPStreaming.open(this, ScreenMirroringConfig.RTP.SSRC, mMirroringSinkCapability.ipAddress, mMirroringSinkCapability.videoUdpPort, mMirroringSinkCapability.audioUdpPort);
336347

337348
if (ScreenMirroringConfig.Test.testMkiUpdate == true) {
@@ -345,19 +356,16 @@ private boolean startCaptureAndStreaming(Intent intent) {
345356
mAudioCapture.setErrorListener(this::stop);
346357
mAudioCapture.startCapture(mMediaProjection, mRTPStreaming.getAudioStreamHandler());
347358

348-
Point captureSizeInLandscape = MirroringServiceFunc.getCaptureSizeInLandscape(this);
349-
Logger.debug("captureSizeInLandscape.x=%d, captureSizeInLandscape.y=%d", captureSizeInLandscape.x, captureSizeInLandscape.y);
350-
351359
mLandscapeVideoCapture = new VideoCaptureIF("land");
352360
mLandscapeVideoCapture.setErrorListener(this::stop);
353-
mLandscapeVideoCapture.prepare(captureSizeInLandscape.x, captureSizeInLandscape.y, ScreenMirroringConfig.Video.BITRATE, mMediaProjection, mRTPStreaming.getVideoStreamHandler());
361+
mLandscapeVideoCapture.prepare(width, height, bitrate, mMediaProjection, mRTPStreaming.getVideoStreamHandler());
354362

355363
mPortraitVideoCapture = new VideoCaptureIF("port");
356364
mPortraitVideoCapture.setErrorListener(this::stop);
357365

358366
if (MirroringServiceFunc.isDualScreen(intent) == false) {
359367
Logger.debug("Prepare portrait capture");
360-
mPortraitVideoCapture.prepare(captureSizeInLandscape.y, captureSizeInLandscape.x, ScreenMirroringConfig.Video.BITRATE, mMediaProjection, mRTPStreaming.getVideoStreamHandler());
368+
mPortraitVideoCapture.prepare(height, width, bitrate, mMediaProjection, mRTPStreaming.getVideoStreamHandler());
361369
}
362370

363371
if (mMirroringSinkCapability.isDisplayPortrait() == true) mPortraitVideoCapture.start();

0 commit comments

Comments
 (0)