mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-20 03:23:07 +00:00
Allow renderer initialization to indicate failure
This commit is contained in:
parent
2f082b9f85
commit
00e81e87de
@ -234,15 +234,13 @@ public class NvConnection {
|
||||
private boolean startVideoStream() throws IOException
|
||||
{
|
||||
videoStream = new VideoStream(hostAddr, listener, controlStream, config);
|
||||
videoStream.startVideoStream(videoDecoderRenderer, videoRenderTarget, drFlags);
|
||||
return true;
|
||||
return videoStream.startVideoStream(videoDecoderRenderer, videoRenderTarget, drFlags);
|
||||
}
|
||||
|
||||
private boolean startAudioStream() throws IOException
|
||||
{
|
||||
audioStream = new AudioStream(hostAddr, listener, audioRenderer);
|
||||
audioStream.startAudioStream();
|
||||
return true;
|
||||
return audioStream.startAudioStream();
|
||||
}
|
||||
|
||||
private boolean startInputConnection() throws IOException
|
||||
|
@ -6,7 +6,7 @@ public interface AudioRenderer {
|
||||
|
||||
public int getCapabilities();
|
||||
|
||||
public void streamInitialized(int channelCount, int sampleRate);
|
||||
public boolean streamInitialized(int channelCount, int sampleRate);
|
||||
|
||||
public void playDecodedAudio(byte[] audioData, int offset, int length);
|
||||
|
||||
|
@ -67,11 +67,14 @@ public class AudioStream {
|
||||
threads.clear();
|
||||
}
|
||||
|
||||
public void startAudioStream() throws SocketException
|
||||
public boolean startAudioStream() throws SocketException
|
||||
{
|
||||
setupRtpSession();
|
||||
|
||||
setupAudio();
|
||||
if (!setupAudio()) {
|
||||
abort();
|
||||
return false;
|
||||
}
|
||||
|
||||
startReceiveThread();
|
||||
|
||||
@ -80,6 +83,8 @@ public class AudioStream {
|
||||
}
|
||||
|
||||
startUdpPingThread();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setupRtpSession() throws SocketException
|
||||
@ -90,7 +95,7 @@ public class AudioStream {
|
||||
rtp.bind(new InetSocketAddress(RTP_PORT));
|
||||
}
|
||||
|
||||
private void setupAudio()
|
||||
private boolean setupAudio()
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -99,7 +104,9 @@ public class AudioStream {
|
||||
throw new IllegalStateException("Opus decoder failed to initialize");
|
||||
}
|
||||
|
||||
streamListener.streamInitialized(OpusDecoder.getChannelCount(), OpusDecoder.getSampleRate());
|
||||
if (!streamListener.streamInitialized(OpusDecoder.getChannelCount(), OpusDecoder.getSampleRate())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((streamListener.getCapabilities() & AudioRenderer.CAPABILITY_DIRECT_SUBMIT) != 0) {
|
||||
depacketizer = new AudioDepacketizer(streamListener);
|
||||
@ -107,6 +114,8 @@ public class AudioStream {
|
||||
else {
|
||||
depacketizer = new AudioDepacketizer(null);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void startDecoderThread()
|
||||
|
@ -7,9 +7,9 @@ public interface VideoDecoderRenderer {
|
||||
|
||||
public int getCapabilities();
|
||||
|
||||
public void setup(int width, int height, int redrawRate, Object renderTarget, int drFlags);
|
||||
public boolean setup(int width, int height, int redrawRate, Object renderTarget, int drFlags);
|
||||
|
||||
public void start(VideoDepacketizer depacketizer);
|
||||
public boolean start(VideoDepacketizer depacketizer);
|
||||
|
||||
public void stop();
|
||||
|
||||
|
@ -132,20 +132,27 @@ public class VideoStream {
|
||||
rtp.bind(new InetSocketAddress(RTP_PORT));
|
||||
}
|
||||
|
||||
public void setupDecoderRenderer(VideoDecoderRenderer decRend, Object renderTarget, int drFlags) {
|
||||
public boolean setupDecoderRenderer(VideoDecoderRenderer decRend, Object renderTarget, int drFlags) {
|
||||
this.decRend = decRend;
|
||||
if (decRend != null) {
|
||||
decRend.setup(streamConfig.getWidth(), streamConfig.getHeight(),
|
||||
60, renderTarget, drFlags);
|
||||
if (!decRend.setup(streamConfig.getWidth(), streamConfig.getHeight(),
|
||||
60, renderTarget, drFlags)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
depacketizer = new VideoDepacketizer(avConnListener, streamConfig.getMaxPacketSize());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void startVideoStream(VideoDecoderRenderer decRend, Object renderTarget, int drFlags) throws IOException
|
||||
public boolean startVideoStream(VideoDecoderRenderer decRend, Object renderTarget, int drFlags) throws IOException
|
||||
{
|
||||
// Setup the decoder and renderer
|
||||
setupDecoderRenderer(decRend, renderTarget, drFlags);
|
||||
if (!setupDecoderRenderer(decRend, renderTarget, drFlags)) {
|
||||
// Nothing to cleanup here
|
||||
return false;
|
||||
}
|
||||
|
||||
// Open RTP sockets and start session
|
||||
setupRtpSession();
|
||||
@ -167,9 +174,14 @@ public class VideoStream {
|
||||
startReceiveThread();
|
||||
|
||||
// Start the renderer
|
||||
decRend.start(depacketizer);
|
||||
if (!decRend.start(depacketizer)) {
|
||||
abort();
|
||||
return false;
|
||||
}
|
||||
startedRendering = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void startReceiveThread()
|
||||
|
Loading…
x
Reference in New Issue
Block a user