mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-17 17:05:50 +00:00
Finally fix the stupid bug causing callbacks to crash. We were directly using a pointer to stack that is invalid after initialization.
This commit is contained in:
parent
da9433fb0a
commit
31cd93b11b
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
#define FIRST_FRAME_MAX 1500
|
#define FIRST_FRAME_MAX 1500
|
||||||
|
|
||||||
PDECODER_RENDERER_CALLBACKS callbacks;
|
DECODER_RENDERER_CALLBACKS callbacks;
|
||||||
PSTREAM_CONFIGURATION configuration;
|
STREAM_CONFIGURATION configuration;
|
||||||
IP_ADDRESS remoteHost;
|
IP_ADDRESS remoteHost;
|
||||||
|
|
||||||
SOCKET rtpSocket = INVALID_SOCKET;
|
SOCKET rtpSocket = INVALID_SOCKET;
|
||||||
@ -20,8 +20,8 @@ PLT_THREAD depacketizerThread;
|
|||||||
PLT_THREAD decoderThread;
|
PLT_THREAD decoderThread;
|
||||||
|
|
||||||
void initializeVideoStream(IP_ADDRESS host, PSTREAM_CONFIGURATION streamConfig, PDECODER_RENDERER_CALLBACKS drCallbacks) {
|
void initializeVideoStream(IP_ADDRESS host, PSTREAM_CONFIGURATION streamConfig, PDECODER_RENDERER_CALLBACKS drCallbacks) {
|
||||||
callbacks = drCallbacks;
|
memcpy(&callbacks, drCallbacks, sizeof(callbacks));
|
||||||
configuration = streamConfig;
|
memcpy(&configuration, streamConfig, sizeof(configuration));
|
||||||
remoteHost = host;
|
remoteHost = host;
|
||||||
|
|
||||||
LbqInitializeLinkedBlockingQueue(&packetQueue, 30);
|
LbqInitializeLinkedBlockingQueue(&packetQueue, 30);
|
||||||
@ -126,7 +126,7 @@ static void DecoderThreadProc(void* context) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
callbacks->submitDecodeUnit(du);
|
callbacks.submitDecodeUnit(du);
|
||||||
|
|
||||||
freeDecodeUnit(du);
|
freeDecodeUnit(du);
|
||||||
}
|
}
|
||||||
@ -192,12 +192,9 @@ void stopVideoStream(void) {
|
|||||||
int startVideoStream(void* rendererContext, int drFlags) {
|
int startVideoStream(void* rendererContext, int drFlags) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (callbacks != NULL) {
|
callbacks.setup(configuration.width,
|
||||||
callbacks->setup(configuration->width,
|
configuration.height, 60, rendererContext, drFlags);
|
||||||
configuration->height, 60, rendererContext, drFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: Set socket options here
|
|
||||||
rtpSocket = bindUdpSocket(47998);
|
rtpSocket = bindUdpSocket(47998);
|
||||||
|
|
||||||
err = PltCreateThread(UdpPingThreadProc, NULL, &udpPingThread);
|
err = PltCreateThread(UdpPingThreadProc, NULL, &udpPingThread);
|
||||||
@ -210,24 +207,22 @@ int startVideoStream(void* rendererContext, int drFlags) {
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (callbacks != NULL) {
|
err = PltCreateThread(ReceiveThreadProc, NULL, &receiveThread);
|
||||||
err = PltCreateThread(ReceiveThreadProc, NULL, &receiveThread);
|
if (err != 0) {
|
||||||
if (err != 0) {
|
return err;
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = PltCreateThread(DepacketizerThreadProc, NULL, &depacketizerThread);
|
|
||||||
if (err != 0) {
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = PltCreateThread(DecoderThreadProc, NULL, &decoderThread);
|
|
||||||
if (err != 0) {
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
callbacks->start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = PltCreateThread(DepacketizerThreadProc, NULL, &depacketizerThread);
|
||||||
|
if (err != 0) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = PltCreateThread(DecoderThreadProc, NULL, &decoderThread);
|
||||||
|
if (err != 0) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
callbacks.start();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user