Browse Source

netjack1/2 Opus: use only 2bytes for encoded-length

tags/1.9.9.5
Robin Gareus 13 years ago
parent
commit
3085ae19e9
4 changed files with 24 additions and 19 deletions
  1. +6
    -6
      common/JackNetOneDriver.cpp
  2. +11
    -6
      common/JackNetTool.cpp
  3. +1
    -1
      common/JackNetTool.h
  4. +6
    -6
      common/netjack_packet.c

+ 6
- 6
common/JackNetOneDriver.cpp View File

@@ -776,6 +776,7 @@ JackNetOneDriver::render_jack_ports_to_payload_celt (JSList *playback_ports, JSL
#endif #endif


#if HAVE_OPUS #if HAVE_OPUS
#define CDO (sizeof(short)) ///< compressed data offset (first 2 bytes are length)
// render functions for Opus. // render functions for Opus.
void void
JackNetOneDriver::render_payload_to_jack_ports_opus (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes) JackNetOneDriver::render_payload_to_jack_ports_opus (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes)
@@ -801,10 +802,9 @@ JackNetOneDriver::render_payload_to_jack_ports_opus (void *packet_payload, jack_
if( !packet_payload ) if( !packet_payload )
memset(buf, 0, nframes * sizeof(float)); memset(buf, 0, nframes * sizeof(float));
else { else {
#define CDO (sizeof(size_t)) ///< compressed data offset (first 4 bytes are length)
size_t len;
memcpy(&len, packet_bufX, sizeof(size_t));
len = ntohl(len);
unsigned short len;
memcpy(&len, packet_bufX, CDO);
len = ntohs(len);
opus_custom_decode_float( decoder, packet_bufX + CDO, len, buf, nframes ); opus_custom_decode_float( decoder, packet_bufX + CDO, len, buf, nframes );
} }


@@ -849,8 +849,8 @@ JackNetOneDriver::render_jack_ports_to_payload_opus (JSList *playback_ports, JSL
memcpy(floatbuf, buf, nframes * sizeof(jack_default_audio_sample_t)); memcpy(floatbuf, buf, nframes * sizeof(jack_default_audio_sample_t));
OpusCustomEncoder *encoder = (OpusCustomEncoder*) src_node->data; OpusCustomEncoder *encoder = (OpusCustomEncoder*) src_node->data;
encoded_bytes = opus_custom_encode_float( encoder, floatbuf, nframes, packet_bufX + CDO, net_period_up - CDO ); encoded_bytes = opus_custom_encode_float( encoder, floatbuf, nframes, packet_bufX + CDO, net_period_up - CDO );
size_t len = htonl(encoded_bytes);
memcpy(packet_bufX, &len, sizeof(size_t));
unsigned short len = htons(encoded_bytes);
memcpy(packet_bufX, &len, CDO);
src_node = jack_slist_next( src_node ); src_node = jack_slist_next( src_node );
} else if (strncmp(portname, JACK_DEFAULT_MIDI_TYPE, jack_port_type_size()) == 0) { } else if (strncmp(portname, JACK_DEFAULT_MIDI_TYPE, jack_port_type_size()) == 0) {
// encode midi events from port to packet // encode midi events from port to packet


+ 11
- 6
common/JackNetTool.cpp View File

@@ -710,7 +710,7 @@ namespace Jack
#endif #endif


#if HAVE_OPUS #if HAVE_OPUS
#define CDO (sizeof(size_t)) ///< compressed data offset (first 4 bytes are length)
#define CDO (sizeof(short)) ///< compressed data offset (first 2 bytes are length)


NetOpusAudioBuffer::NetOpusAudioBuffer(session_params_t* params, uint32_t nports, char* net_buffer, int kbps) NetOpusAudioBuffer::NetOpusAudioBuffer(session_params_t* params, uint32_t nports, char* net_buffer, int kbps)
:NetAudioBuffer(params, nports, net_buffer) :NetAudioBuffer(params, nports, net_buffer)
@@ -718,7 +718,7 @@ namespace Jack
fOpusMode = new OpusCustomMode *[fNPorts]; fOpusMode = new OpusCustomMode *[fNPorts];
fOpusEncoder = new OpusCustomEncoder *[fNPorts]; fOpusEncoder = new OpusCustomEncoder *[fNPorts];
fOpusDecoder = new OpusCustomDecoder *[fNPorts]; fOpusDecoder = new OpusCustomDecoder *[fNPorts];
fCompressedSizesByte = new size_t [fNPorts];
fCompressedSizesByte = new unsigned short [fNPorts];


memset(fOpusMode, 0, fNPorts * sizeof(OpusCustomMode*)); memset(fOpusMode, 0, fNPorts * sizeof(OpusCustomMode*));
memset(fOpusEncoder, 0, fNPorts * sizeof(OpusCustomEncoder*)); memset(fOpusEncoder, 0, fNPorts * sizeof(OpusCustomEncoder*));
@@ -854,7 +854,12 @@ namespace Jack
} else { } else {
memset(buffer, 0, fPeriodSize * sizeof(sample_t)); memset(buffer, 0, fPeriodSize * sizeof(sample_t));
} }
fCompressedSizesByte[port_index] = opus_custom_encode_float(fOpusEncoder[port_index], buffer, fPeriodSize, fCompressedBuffer[port_index], fCompressedMaxSizeByte);
int res = opus_custom_encode_float(fOpusEncoder[port_index], buffer, fPeriodSize, fCompressedBuffer[port_index], fCompressedMaxSizeByte);
if (res <0 || res >= 65535) {
fCompressedSizesByte[port_index] = 0;
} else {
fCompressedSizesByte[port_index] = res;
}
} }


// All ports active // All ports active
@@ -866,7 +871,7 @@ namespace Jack
for (int port_index = 0; port_index < fNPorts; port_index++) { for (int port_index = 0; port_index < fNPorts; port_index++) {
if (fPortBuffer[port_index]) { if (fPortBuffer[port_index]) {
int res = opus_custom_decode_float(fOpusDecoder[port_index], fCompressedBuffer[port_index], fCompressedSizesByte[port_index], fPortBuffer[port_index], fPeriodSize); int res = opus_custom_decode_float(fOpusDecoder[port_index], fCompressedBuffer[port_index], fCompressedSizesByte[port_index], fPortBuffer[port_index], fPeriodSize);
if (res != fPeriodSize) {
if (res < 0 || res != fPeriodSize) {
jack_error("opus_decode_float error fCompressedSizeByte = %d res = %d", fCompressedSizesByte[port_index], res); jack_error("opus_decode_float error fCompressedSizeByte = %d res = %d", fCompressedSizesByte[port_index], res);
} }
} }
@@ -887,7 +892,7 @@ namespace Jack
if (sub_cycle == 0) { if (sub_cycle == 0) {
for (int port_index = 0; port_index < fNPorts; port_index++) { for (int port_index = 0; port_index < fNPorts; port_index++) {
size_t len = *((size_t*)(fNetBuffer + port_index * fSubPeriodBytesSize)); size_t len = *((size_t*)(fNetBuffer + port_index * fSubPeriodBytesSize));
fCompressedSizesByte[port_index] = ntohl(len);
fCompressedSizesByte[port_index] = ntohs(len);
memcpy(fCompressedBuffer[port_index] + sub_cycle * fSubPeriodBytesSize, fNetBuffer + CDO + port_index * fSubPeriodBytesSize, fSubPeriodBytesSize - CDO); memcpy(fCompressedBuffer[port_index] + sub_cycle * fSubPeriodBytesSize, fNetBuffer + CDO + port_index * fSubPeriodBytesSize, fSubPeriodBytesSize - CDO);
} }
} else if (sub_cycle == fNumPackets - 1) { } else if (sub_cycle == fNumPackets - 1) {
@@ -908,7 +913,7 @@ namespace Jack
{ {
if (sub_cycle == 0) { if (sub_cycle == 0) {
for (int port_index = 0; port_index < fNPorts; port_index++) { for (int port_index = 0; port_index < fNPorts; port_index++) {
size_t len = htonl(fCompressedSizesByte[port_index]);
unsigned short len = htons(fCompressedSizesByte[port_index]);
memcpy(fNetBuffer + port_index * fSubPeriodBytesSize, &len, CDO); memcpy(fNetBuffer + port_index * fSubPeriodBytesSize, &len, CDO);
memcpy(fNetBuffer + port_index * fSubPeriodBytesSize + CDO, fCompressedBuffer[port_index], fSubPeriodBytesSize - CDO); memcpy(fNetBuffer + port_index * fSubPeriodBytesSize + CDO, fCompressedBuffer[port_index], fSubPeriodBytesSize - CDO);
} }


+ 1
- 1
common/JackNetTool.h View File

@@ -419,7 +419,7 @@ namespace Jack
OpusCustomEncoder** fOpusEncoder; OpusCustomEncoder** fOpusEncoder;
OpusCustomDecoder** fOpusDecoder; OpusCustomDecoder** fOpusDecoder;


size_t *fCompressedSizesByte;
unsigned short *fCompressedSizesByte;
int fCompressedMaxSizeByte; int fCompressedMaxSizeByte;
int fNumPackets; int fNumPackets;




+ 6
- 6
common/netjack_packet.c View File

@@ -1356,6 +1356,7 @@ render_jack_ports_to_payload_celt (JSList *playback_ports, JSList *playback_srcs
#endif #endif


#if HAVE_OPUS #if HAVE_OPUS
#define CDO (sizeof(short)) ///< compressed data offset (first 2 bytes are length)
// render functions for Opus. // render functions for Opus.
void void
render_payload_to_jack_ports_opus (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes) render_payload_to_jack_ports_opus (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes)
@@ -1378,10 +1379,9 @@ render_payload_to_jack_ports_opus (void *packet_payload, jack_nframes_t net_peri
if( !packet_payload ) if( !packet_payload )
memset(buf, 0, nframes * sizeof(float)); memset(buf, 0, nframes * sizeof(float));
else { else {
#define CDO (sizeof(size_t)) ///< compressed data offset (first 4 bytes are length)
size_t len;
memcpy(&len, packet_bufX, sizeof(size_t));
len = ntohl(len);
unsigned short len;
memcpy(&len, packet_bufX, CDO);
len = ntohs(len);
opus_custom_decode_float( decoder, packet_bufX + CDO, len, buf, nframes ); opus_custom_decode_float( decoder, packet_bufX + CDO, len, buf, nframes );
} }


@@ -1422,8 +1422,8 @@ render_jack_ports_to_payload_opus (JSList *playback_ports, JSList *playback_srcs
memcpy( floatbuf, buf, nframes * sizeof(float) ); memcpy( floatbuf, buf, nframes * sizeof(float) );
OpusCustomEncoder *encoder = (OpusCustomEncoder*) src_node->data; OpusCustomEncoder *encoder = (OpusCustomEncoder*) src_node->data;
encoded_bytes = opus_custom_encode_float( encoder, floatbuf, nframes, packet_bufX + CDO, net_period_up - CDO ); encoded_bytes = opus_custom_encode_float( encoder, floatbuf, nframes, packet_bufX + CDO, net_period_up - CDO );
size_t len = htonl(encoded_bytes);
memcpy(packet_bufX, &len, sizeof(size_t));
unsigned short len = htons(encoded_bytes);
memcpy(packet_bufX, &len, CDO);
src_node = jack_slist_next( src_node ); src_node = jack_slist_next( src_node );
} else if (jack_port_is_midi (porttype)) { } else if (jack_port_is_midi (porttype)) {
// encode midi events from port to packet // encode midi events from port to packet


Loading…
Cancel
Save