summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/playback_channel.cpp8
-rw-r--r--common/messages.h6
-rw-r--r--server/snd_worker.c2
-rw-r--r--spice.proto8
4 files changed, 13 insertions, 11 deletions
diff --git a/client/playback_channel.cpp b/client/playback_channel.cpp
index 9ac6ed63..1e902a90 100644
--- a/client/playback_channel.cpp
+++ b/client/playback_channel.cpp
@@ -295,8 +295,8 @@ void PlaybackChannel::handle_stop(RedPeer::InMessage* message)
void PlaybackChannel::handle_raw_data(RedPeer::InMessage* message)
{
SpiceMsgPlaybackPacket* packet = (SpiceMsgPlaybackPacket*)message->data();
- uint8_t* data = (uint8_t*)(packet + 1);
- uint32_t size = message->size() - sizeof(*packet);
+ uint8_t* data = packet->data;
+ uint32_t size = packet->data_size;
#ifdef WAVE_CAPTURE
put_wave_data(data, size);
return;
@@ -315,8 +315,8 @@ void PlaybackChannel::handle_raw_data(RedPeer::InMessage* message)
void PlaybackChannel::handle_celt_data(RedPeer::InMessage* message)
{
SpiceMsgPlaybackPacket* packet = (SpiceMsgPlaybackPacket*)message->data();
- uint8_t* data = (uint8_t*)(packet + 1);
- uint32_t size = message->size() - sizeof(*packet);
+ uint8_t* data = packet->data;
+ uint32_t size = packet->data_size;
celt_int16_t pcm[256 * 2];
if (celt051_decode(_celt_decoder, data, size, pcm) != CELT_OK) {
diff --git a/common/messages.h b/common/messages.h
index e3179490..7575f071 100644
--- a/common/messages.h
+++ b/common/messages.h
@@ -368,7 +368,8 @@ typedef struct SpiceMsgcMouseRelease {
typedef struct SpiceMsgPlaybackMode {
uint32_t time;
uint32_t mode; //SPICE_AUDIO_DATA_MODE_?
- uint8_t data[0];
+ uint8_t *data;
+ uint32_t data_size;
} SpiceMsgPlaybackMode, SpiceMsgcRecordMode;
typedef struct SpiceMsgPlaybackStart {
@@ -380,7 +381,8 @@ typedef struct SpiceMsgPlaybackStart {
typedef struct SpiceMsgPlaybackPacket {
uint32_t time;
- uint8_t data[0];
+ uint8_t *data;
+ uint32_t data_size;
} SpiceMsgPlaybackPacket, SpiceMsgcRecordPacket;
typedef struct SpiceMsgRecordStart {
diff --git a/server/snd_worker.c b/server/snd_worker.c
index 544da3bd..d55380c8 100644
--- a/server/snd_worker.c
+++ b/server/snd_worker.c
@@ -281,7 +281,7 @@ static int snd_record_handle_write(RecordChannel *record_channel, size_t size, v
}
packet = (SpiceMsgcRecordPacket *)message;
- size = size - sizeof(*packet);
+ size = packet->data_size;
if (record_channel->mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
int celt_err = celt051_decode(record_channel->celt_decoder, packet->data, size,
diff --git a/spice.proto b/spice.proto
index bad9ed3a..6cedfac1 100644
--- a/spice.proto
+++ b/spice.proto
@@ -921,13 +921,13 @@ channel PlaybackChannel : BaseChannel {
server:
message {
uint32 time;
- uint8 data[] @end;
+ uint8 data[] @end @as_ptr(data_size);
} @ctype(SpiceMsgPlaybackPacket) data = 101;
message {
uint32 time;
audio_data_mode mode;
- uint8 data[] @end;
+ uint8 data[] @end @as_ptr(data_size);
} mode;
message {
@@ -952,13 +952,13 @@ channel RecordChannel : BaseChannel {
client:
message {
uint32 time;
- uint8 data[] @end @nomarshal;
+ uint8 data[] @end @nomarshal @as_ptr(data_size);
} @ctype(SpiceMsgcRecordPacket) data = 101;
message {
uint32 time;
audio_data_mode mode;
- uint8 data[] @end;
+ uint8 data[] @end @as_ptr(data_size);
} mode;
message {