From 945a9bb7460dbe84f3ed657bdd718ea91d57b31a Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 15 Aug 2014 21:44:53 +0200 Subject: Switch to new ZMQ frame format --- zmqoutput.c | 18 +++++++++++++++++- zmqoutput.h | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/zmqoutput.c b/zmqoutput.c index cc8937e..6d9db68 100644 --- a/zmqoutput.c +++ b/zmqoutput.c @@ -1,6 +1,7 @@ #include "zmqoutput.h" #include #include +#include #include "common.h" static void *zmq_context; @@ -43,7 +44,22 @@ int zmqoutput_write_byte(Bit_stream_struc *bs, unsigned char data) if (zmqbuf_len == bs->zmq_framesize) { - int send_error = zmq_send(bs->zmq_sock, zmqbuf, bs->zmq_framesize, + int frame_length = sizeof(struct zmq_frame_header) + zmqbuf_len; + + struct zmq_frame_header* header = + malloc(frame_length); + + uint8_t* txframe = ((uint8_t*)header) + sizeof(struct zmq_frame_header); + + header->version = 1; + header->encoder = ZMQ_ENCODER_TOOLAME; + header->datasize = zmqbuf_len; + header->audiolevel_left = 0; + header->audiolevel_right = 0; + + memcpy(txframe, zmqbuf, zmqbuf_len); + + int send_error = zmq_send(bs->zmq_sock, txframe, frame_length, ZMQ_DONTWAIT); if (send_error < 0) { diff --git a/zmqoutput.h b/zmqoutput.h index 8d7cb13..a4eb556 100644 --- a/zmqoutput.h +++ b/zmqoutput.h @@ -1,8 +1,27 @@ #ifndef _ZMQOUTPUT_H_ #define _ZMQOUTPUT_H_ +#include #include "common.h" +#define ZMQ_ENCODER_TOOLAME 2 + +struct zmq_frame_header +{ + uint16_t version; // we support version=1 now + uint16_t encoder; // see ZMQ_ENCODER_XYZ + + /* length of the 'data' field */ + uint32_t datasize; + + /* Audio level, peak, linear PCM */ + int16_t audiolevel_left; + int16_t audiolevel_right; + + /* Data follows this header */ +} __attribute__ ((packed)); + + int zmqoutput_open(Bit_stream_struc * bs, char* uri); int zmqoutput_write_byte(Bit_stream_struc *bs, unsigned char data); -- cgit v1.2.3