[Spice-devel] [PATCH] make celt to be optional
Alon Levy
alevy at redhat.com
Mon Jun 4 05:28:00 PDT 2012
On Mon, Jun 04, 2012 at 11:33:22AM +0200, Christophe Fergeau wrote:
> Makes sense to me though I've only looked quickly through it. Since it
> works for you, I'm in favour of committing it if noone disagrees.
I agree. Would you do a review and ack?
>
> Christophe
>
> On Sat, Jun 02, 2012 at 03:46:55PM +0400, Michael Tokarev wrote:
> > With this patch applied, celt051 library isn't required
> > anymore. It is still required by default, but there's
> > a new configure option, --disable-celt051, which makes
> > the configure code to omit checking/finding the celt
> > library and makes resulting spice library to not use
> > celt codec at all.
> >
> > The changes in the code - there are relatively many -
> > are located in 3 source files (see diffstat):
> >
> > client/playback_channel.cpp
> > client/record_channel.cpp
> > server/snd_worker.c
> >
> > and are local/private to the library (client and server),
> > so no external ABI/API is done.
> >
> > I found and marked hopefully all places where celt
> > codec is being touched/referenced. The patch may
> > help future development too, indicating all places
> > where codec-specific code is used (just grep source
> > for HAVE_CELT051 to see these).
> >
> > I plan to use this patch in the upcoming Debian
> > release, codename wheezy, to get rid of celt
> > codec library there, since we decided celt051 is
> > not going to be included, but it is obviously not
> > a good idea to drop spice entirely.
> >
> > I did some interoperability tests and the thing
> > appears to work -- unpatched client to patched
> > server, patched client to unpatched server and
> > patched client to patched server. I didn't check
> > old clients and servers, however. In all cases,
> > raw audio stream is being choosen and used. But
> > since I don't really know how spice works internally,
> > maybe I didn't perform correct testing.
> >
> > Please consider applying.
> >
> > Signed-off-By: Michael Tokarev <mjt at tls.msk.ru>
> > Cc: Ron Lee <ron at debian.org>
> > Cc: Liang Guo <bluestonechina at gmail.com>
> > ---
> > client/audio_channels.h | 8 +++++
> > client/playback_channel.cpp | 25 ++++++++++---
> > client/record_channel.cpp | 21 +++++++++--
> > configure.ac | 16 ++++++---
> > server/snd_worker.c | 82 ++++++++++++++++++++++++++++++++++---------
> > 5 files changed, 122 insertions(+), 30 deletions(-)
> >
> > diff --git a/client/audio_channels.h b/client/audio_channels.h
> > index d38a79e..8f8a186 100644
> > --- a/client/audio_channels.h
> > +++ b/client/audio_channels.h
> > @@ -18,7 +18,9 @@
> > #ifndef _H_AUDIO_CHANNELS
> > #define _H_AUDIO_CHANNELS
> >
> > +#if HAVE_CELT051
> > #include <celt051/celt.h>
> > +#endif
> >
> > #include "red_channel.h"
> > #include "debug.h"
> > @@ -45,7 +47,9 @@ private:
> > void handle_start(RedPeer::InMessage* message);
> > void handle_stop(RedPeer::InMessage* message);
> > void handle_raw_data(RedPeer::InMessage* message);
> > +#if HAVE_CELT051
> > void handle_celt_data(RedPeer::InMessage* message);
> > +#endif
> > void null_handler(RedPeer::InMessage* message);
> > void disable();
> >
> > @@ -57,8 +61,10 @@ private:
> > WavePlaybackAbstract* _wave_player;
> > uint32_t _mode;
> > uint32_t _frame_bytes;
> > +#if HAVE_CELT051
> > CELTMode *_celt_mode;
> > CELTDecoder *_celt_decoder;
> > +#endif
> > bool _playing;
> > uint32_t _frame_count;
> > };
> > @@ -96,8 +102,10 @@ private:
> > Mutex _messages_lock;
> > std::list<RecordSamplesMessage *> _messages;
> > int _mode;
> > +#if HAVE_CELT051
> > CELTMode *_celt_mode;
> > CELTEncoder *_celt_encoder;
> > +#endif
> > uint32_t _frame_bytes;
> >
> > static int data_mode;
> > diff --git a/client/playback_channel.cpp b/client/playback_channel.cpp
> > index 802a4d3..caf6424 100644
> > --- a/client/playback_channel.cpp
> > +++ b/client/playback_channel.cpp
> > @@ -151,8 +151,10 @@ PlaybackChannel::PlaybackChannel(RedClient& client, uint32_t id)
> > Platform::PRIORITY_HIGH)
> > , _wave_player (NULL)
> > , _mode (SPICE_AUDIO_DATA_MODE_INVALID)
> > +#if HAVE_CELT051
> > , _celt_mode (NULL)
> > , _celt_decoder (NULL)
> > +#endif
> > , _playing (false)
> > {
> > #ifdef WAVE_CAPTURE
> > @@ -169,7 +171,9 @@ PlaybackChannel::PlaybackChannel(RedClient& client, uint32_t id)
> >
> > handler->set_handler(SPICE_MSG_PLAYBACK_MODE, &PlaybackChannel::handle_mode);
> >
> > +#if HAVE_CELT051
> > set_capability(SPICE_PLAYBACK_CAP_CELT_0_5_1);
> > +#endif
> > }
> >
> > void PlaybackChannel::clear()
> > @@ -182,6 +186,7 @@ void PlaybackChannel::clear()
> > }
> > _mode = SPICE_AUDIO_DATA_MODE_INVALID;
> >
> > +#if HAVE_CELT051
> > if (_celt_decoder) {
> > celt051_decoder_destroy(_celt_decoder);
> > _celt_decoder = NULL;
> > @@ -191,6 +196,7 @@ void PlaybackChannel::clear()
> > celt051_mode_destroy(_celt_mode);
> > _celt_mode = NULL;
> > }
> > +#endif
> > }
> >
> > void PlaybackChannel::on_disconnect()
> > @@ -214,8 +220,10 @@ void PlaybackChannel::set_data_handler()
> >
> > if (_mode == SPICE_AUDIO_DATA_MODE_RAW) {
> > handler->set_handler(SPICE_MSG_PLAYBACK_DATA, &PlaybackChannel::handle_raw_data);
> > +#if HAVE_CELT051
> > } else if (_mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
> > handler->set_handler(SPICE_MSG_PLAYBACK_DATA, &PlaybackChannel::handle_celt_data);
> > +#endif
> > } else {
> > THROW("invalid mode");
> > }
> > @@ -224,8 +232,11 @@ void PlaybackChannel::set_data_handler()
> > void PlaybackChannel::handle_mode(RedPeer::InMessage* message)
> > {
> > SpiceMsgPlaybackMode* playbacke_mode = (SpiceMsgPlaybackMode*)message->data();
> > - if (playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_RAW &&
> > - playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
> > + if (playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_RAW
> > +#if HAVE_CELT051
> > + && playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_CELT_0_5_1
> > +#endif
> > + ) {
> > THROW("invalid mode");
> > }
> >
> > @@ -265,9 +276,6 @@ void PlaybackChannel::handle_start(RedPeer::InMessage* message)
> > start_wave();
> > #endif
> > if (!_wave_player) {
> > - // for now support only one setting
> > - int celt_mode_err;
> > -
> > if (start->format != SPICE_AUDIO_FMT_S16) {
> > THROW("unexpected format");
> > }
> > @@ -284,6 +292,10 @@ void PlaybackChannel::handle_start(RedPeer::InMessage* message)
> > return;
> > }
> >
> > +#if HAVE_CELT051
> > + // for now support only one setting
> > + int celt_mode_err;
> > +
> > if (!(_celt_mode = celt051_mode_create(start->frequency, start->channels,
> > frame_size, &celt_mode_err))) {
> > THROW("create celt mode failed %d", celt_mode_err);
> > @@ -292,6 +304,7 @@ void PlaybackChannel::handle_start(RedPeer::InMessage* message)
> > if (!(_celt_decoder = celt051_decoder_create(_celt_mode))) {
> > THROW("create celt decoder");
> > }
> > +#endif
> > }
> > _playing = true;
> > _frame_count = 0;
> > @@ -333,6 +346,7 @@ void PlaybackChannel::handle_raw_data(RedPeer::InMessage* message)
> > _wave_player->write(data);
> > }
> >
> > +#if HAVE_CELT051
> > void PlaybackChannel::handle_celt_data(RedPeer::InMessage* message)
> > {
> > SpiceMsgPlaybackPacket* packet = (SpiceMsgPlaybackPacket*)message->data();
> > @@ -352,6 +366,7 @@ void PlaybackChannel::handle_celt_data(RedPeer::InMessage* message)
> > }
> > _wave_player->write((uint8_t *)pcm);
> > }
> > +#endif
> >
> > class PlaybackFactory: public ChannelFactory {
> > public:
> > diff --git a/client/record_channel.cpp b/client/record_channel.cpp
> > index d9332c6..dbf8344 100644
> > --- a/client/record_channel.cpp
> > +++ b/client/record_channel.cpp
> > @@ -72,8 +72,10 @@ RecordChannel::RecordChannel(RedClient& client, uint32_t id)
> > : RedChannel(client, SPICE_CHANNEL_RECORD, id, new RecordHandler(*this))
> > , _wave_recorder (NULL)
> > , _mode (SPICE_AUDIO_DATA_MODE_INVALID)
> > +#if HAVE_CELT051
> > , _celt_mode (NULL)
> > , _celt_encoder (NULL)
> > +#endif
> > {
> > for (int i = 0; i < NUM_SAMPLES_MESSAGES; i++) {
> > _messages.push_front(new RecordSamplesMessage(*this));
> > @@ -142,7 +144,11 @@ void RecordChannel::handle_start(RedPeer::InMessage* message)
> >
> > handler->set_handler(SPICE_MSG_RECORD_START, NULL);
> > handler->set_handler(SPICE_MSG_RECORD_STOP, &RecordChannel::handle_stop);
> > +#if HAVE_CELT051
> > ASSERT(!_wave_recorder && !_celt_mode && !_celt_encoder);
> > +#else
> > + ASSERT(!_wave_recorder);
> > +#endif
> >
> > // for now support only one setting
> > if (start->format != SPICE_AUDIO_FMT_S16) {
> > @@ -160,8 +166,9 @@ void RecordChannel::handle_start(RedPeer::InMessage* message)
> > }
> >
> > int frame_size = 256;
> > - int celt_mode_err;
> > _frame_bytes = frame_size * bits_per_sample * start->channels / 8;
> > +#if HAVE_CELT051
> > + int celt_mode_err;
> > if (!(_celt_mode = celt051_mode_create(start->frequency, start->channels, frame_size,
> > &celt_mode_err))) {
> > THROW("create celt mode failed %d", celt_mode_err);
> > @@ -170,6 +177,7 @@ void RecordChannel::handle_start(RedPeer::InMessage* message)
> > if (!(_celt_encoder = celt051_encoder_create(_celt_mode))) {
> > THROW("create celt encoder failed");
> > }
> > +#endif
> >
> > send_start_mark();
> > _wave_recorder->start();
> > @@ -182,6 +190,7 @@ void RecordChannel::clear()
> > delete _wave_recorder;
> > _wave_recorder = NULL;
> > }
> > +#if HAVE_CELT051
> > if (_celt_encoder) {
> > celt051_encoder_destroy(_celt_encoder);
> > _celt_encoder = NULL;
> > @@ -190,6 +199,7 @@ void RecordChannel::clear()
> > celt051_mode_destroy(_celt_mode);
> > _celt_mode = NULL;
> > }
> > +#endif
> > }
> >
> > void RecordChannel::handle_stop(RedPeer::InMessage* message)
> > @@ -200,7 +210,9 @@ void RecordChannel::handle_stop(RedPeer::InMessage* message)
> > if (!_wave_recorder) {
> > return;
> > }
> > +#if HAVE_CELT051
> > ASSERT(_celt_mode && _celt_encoder);
> > +#endif
> > clear();
> > }
> >
> > @@ -254,8 +266,9 @@ void RecordChannel::push_frame(uint8_t *frame)
> > DBG(0, "blocked");
> > return;
> > }
> > - uint8_t celt_buf[CELT_COMPRESSED_FRAME_BYTES];
> > int n;
> > +#if HAVE_CELT051
> > + uint8_t celt_buf[CELT_COMPRESSED_FRAME_BYTES];
> >
> > if (_mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
> > n = celt051_encode(_celt_encoder, (celt_int16_t *)frame, NULL, celt_buf,
> > @@ -264,7 +277,9 @@ void RecordChannel::push_frame(uint8_t *frame)
> > THROW("celt encode failed");
> > }
> > frame = celt_buf;
> > - } else {
> > + } else
> > +#endif
> > + {
> > n = _frame_bytes;
> > }
> > RedPeer::OutMessage& peer_message = message->peer_message();
> > diff --git a/configure.ac b/configure.ac
> > index 66f9d12..21bd326 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -125,6 +125,9 @@ AM_CONDITIONAL(SUPPORT_SMARTCARD, test "x$enable_smartcard" != "xno")
> > if test "x$enable_smartcard" = "xyes"; then
> > AC_DEFINE([USE_SMARTCARD], [1], [Define if supporting smartcard proxying])
> > fi
> > +AC_ARG_ENABLE(celt051,
> > +[ --disable-celt051 Disable celt051 audio codec (enabled by default)],,
> > +[enable_celt051="yes"])
> >
> > AC_ARG_ENABLE(client,
> > [ --enable-client Enable spice client],,
> > @@ -220,11 +223,14 @@ AC_SUBST(PIXMAN_CFLAGS)
> > AC_SUBST(PIXMAN_LIBS)
> > SPICE_REQUIRES+=" pixman-1 >= 0.17.7"
> >
> > -PKG_CHECK_MODULES(CELT051, celt051 >= 0.5.1.1)
> > -AC_SUBST(CELT051_CFLAGS)
> > -AC_SUBST(CELT051_LIBS)
> > -AC_SUBST(CELT051_LIBDIR)
> > -SPICE_REQUIRES+=" celt051 >= 0.5.1.1"
> > +if test "x$enable_celt051" = "xyes"; then
> > + PKG_CHECK_MODULES(CELT051, celt051 >= 0.5.1.1)
> > + SPICE_REQUIRES+=" celt051 >= 0.5.1.1"
> > + AC_DEFINE([HAVE_CELT051], 1, [Define if we have celt051 codec])
> > + AC_SUBST(CELT051_CFLAGS)
> > + AC_SUBST(CELT051_LIBS)
> > + AC_SUBST(CELT051_LIBDIR)
> > +fi
> >
> > if test ! -e client/generated_marshallers.cpp; then
> > AC_MSG_CHECKING([for pyparsing python module])
> > diff --git a/server/snd_worker.c b/server/snd_worker.c
> > index 3599c6f..f0588ad 100644
> > --- a/server/snd_worker.c
> > +++ b/server/snd_worker.c
> > @@ -25,7 +25,9 @@
> > #include <sys/socket.h>
> > #include <netinet/ip.h>
> > #include <netinet/tcp.h>
> > +#if HAVE_CELT051
> > #include <celt051/celt.h>
> > +#endif
> >
> > #include "common/marshaller.h"
> > #include "common/generated_server_marshallers.h"
> > @@ -136,12 +138,14 @@ typedef struct PlaybackChannel {
> > AudioFrame *free_frames;
> > AudioFrame *in_progress;
> > AudioFrame *pending_frame;
> > + uint32_t mode;
> > +#if HAVE_CELT051
> > CELTMode *celt_mode;
> > CELTEncoder *celt_encoder;
> > - uint32_t mode;
> > struct {
> > uint8_t celt_buf[CELT_COMPRESSED_FRAME_BYTES];
> > } send_data;
> > +#endif
> > } PlaybackChannel;
> >
> > struct SndWorker {
> > @@ -187,13 +191,21 @@ typedef struct RecordChannel {
> > uint32_t mode;
> > uint32_t mode_time;
> > uint32_t start_time;
> > +#if HAVE_CELT051
> > CELTDecoder *celt_decoder;
> > CELTMode *celt_mode;
> > uint32_t celt_buf[FRAME_SIZE];
> > +#endif
> > } RecordChannel;
> >
> > static SndWorker *workers;
> > -static uint32_t playback_compression = SPICE_AUDIO_DATA_MODE_CELT_0_5_1;
> > +static uint32_t playback_compression =
> > +#if HAVE_CELT051
> > + SPICE_AUDIO_DATA_MODE_CELT_0_5_1
> > +#else
> > + SPICE_AUDIO_DATA_MODE_RAW
> > +#endif
> > + ;
> >
> > static void snd_receive(void* data);
> >
> > @@ -322,6 +334,7 @@ static int snd_record_handle_write(RecordChannel *record_channel, size_t size, v
> > packet = (SpiceMsgcRecordPacket *)message;
> > size = packet->data_size;
> >
> > +#if HAVE_CELT051
> > if (record_channel->mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
> > int celt_err = celt051_decode(record_channel->celt_decoder, packet->data, size,
> > (celt_int16_t *)record_channel->celt_buf);
> > @@ -331,7 +344,9 @@ static int snd_record_handle_write(RecordChannel *record_channel, size_t size, v
> > }
> > data = record_channel->celt_buf;
> > size = FRAME_SIZE;
> > - } else if (record_channel->mode == SPICE_AUDIO_DATA_MODE_RAW) {
> > + } else
> > +#endif
> > + if (record_channel->mode == SPICE_AUDIO_DATA_MODE_RAW) {
> > data = (uint32_t *)packet->data;
> > size = size >> 2;
> > size = MIN(size, RECORD_SAMPLES_SIZE);
> > @@ -386,8 +401,11 @@ static int snd_record_handle_message(SndChannel *channel, size_t size, uint32_t
> > SpiceMsgcRecordMode *mode = (SpiceMsgcRecordMode *)message;
> > record_channel->mode = mode->mode;
> > record_channel->mode_time = mode->time;
> > - if (record_channel->mode != SPICE_AUDIO_DATA_MODE_CELT_0_5_1 &&
> > - record_channel->mode != SPICE_AUDIO_DATA_MODE_RAW) {
> > + if (record_channel->mode != SPICE_AUDIO_DATA_MODE_RAW
> > +#if HAVE_CELT051
> > + && record_channel->mode != SPICE_AUDIO_DATA_MODE_CELT_0_5_1
> > +#endif
> > + ) {
> > spice_printerr("unsupported mode");
> > }
> > break;
> > @@ -779,6 +797,7 @@ static int snd_playback_send_write(PlaybackChannel *playback_channel)
> >
> > spice_marshall_msg_playback_data(channel->send_data.marshaller, &msg);
> >
> > +#if HAVE_CELT051
> > if (playback_channel->mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
> > int n = celt051_encode(playback_channel->celt_encoder, (celt_int16_t *)frame->samples, NULL,
> > playback_channel->send_data.celt_buf, CELT_COMPRESSED_FRAME_BYTES);
> > @@ -789,7 +808,9 @@ static int snd_playback_send_write(PlaybackChannel *playback_channel)
> > }
> > spice_marshaller_add_ref(channel->send_data.marshaller,
> > playback_channel->send_data.celt_buf, n);
> > - } else {
> > + } else
> > +#endif
> > + {
> > spice_marshaller_add_ref(channel->send_data.marshaller,
> > (uint8_t *)frame->samples, sizeof(frame->samples));
> > }
> > @@ -1157,8 +1178,10 @@ static void snd_playback_cleanup(SndChannel *channel)
> > reds_enable_mm_timer();
> > }
> >
> > +#if HAVE_CELT051
> > celt051_encoder_destroy(playback_channel->celt_encoder);
> > celt051_mode_destroy(playback_channel->celt_mode);
> > +#endif
> > }
> >
> > static void snd_set_playback_peer(RedChannel *channel, RedClient *client, RedsStream *stream,
> > @@ -1168,13 +1191,13 @@ static void snd_set_playback_peer(RedChannel *channel, RedClient *client, RedsSt
> > SndWorker *worker = channel->data;
> > PlaybackChannel *playback_channel;
> > SpicePlaybackState *st = SPICE_CONTAINEROF(worker, SpicePlaybackState, worker);
> > - CELTEncoder *celt_encoder;
> > - CELTMode *celt_mode;
> > - int celt_error;
> > - RedChannelClient *rcc;
> >
> > snd_disconnect_channel(worker->connection);
> >
> > +#if HAVE_CELT051
> > + CELTEncoder *celt_encoder;
> > + CELTMode *celt_mode;
> > + int celt_error;
> > if (!(celt_mode = celt051_mode_create(SPICE_INTERFACE_PLAYBACK_FREQ,
> > SPICE_INTERFACE_PLAYBACK_CHAN,
> > FRAME_SIZE, &celt_error))) {
> > @@ -1186,6 +1209,7 @@ static void snd_set_playback_peer(RedChannel *channel, RedClient *client, RedsSt
> > spice_printerr("create celt encoder failed");
> > goto error_1;
> > }
> > +#endif
> >
> > if (!(playback_channel = (PlaybackChannel *)__new_channel(worker,
> > sizeof(*playback_channel),
> > @@ -1202,16 +1226,20 @@ static void snd_set_playback_peer(RedChannel *channel, RedClient *client, RedsSt
> > goto error_2;
> > }
> > worker->connection = &playback_channel->base;
> > - rcc = playback_channel->base.channel_client;
> > snd_playback_free_frame(playback_channel, &playback_channel->frames[0]);
> > snd_playback_free_frame(playback_channel, &playback_channel->frames[1]);
> > snd_playback_free_frame(playback_channel, &playback_channel->frames[2]);
> >
> > +#if HAVE_CELT051
> > playback_channel->celt_mode = celt_mode;
> > playback_channel->celt_encoder = celt_encoder;
> > - playback_channel->mode = red_channel_client_test_remote_cap(rcc,
> > - SPICE_PLAYBACK_CAP_CELT_0_5_1) ?
> > + playback_channel->mode =
> > + red_channel_client_test_remote_cap(playback_channel->base.channel_client,
> > + SPICE_PLAYBACK_CAP_CELT_0_5_1) ?
> > playback_compression : SPICE_AUDIO_DATA_MODE_RAW;
> > +#else
> > + playback_channel->mode = SPICE_AUDIO_DATA_MODE_RAW;
> > +#endif
> >
> > on_new_playback_channel(worker);
> > if (worker->active) {
> > @@ -1221,10 +1249,13 @@ static void snd_set_playback_peer(RedChannel *channel, RedClient *client, RedsSt
> > return;
> >
> > error_2:
> > +#if HAVE_CELT051
> > celt051_encoder_destroy(celt_encoder);
> >
> > error_1:
> > celt051_mode_destroy(celt_mode);
> > +#endif
> > + return;
> > }
> >
> > static void snd_record_migrate_channel_client(RedChannelClient *rcc)
> > @@ -1365,10 +1396,12 @@ static void on_new_record_channel(SndWorker *worker)
> >
> > static void snd_record_cleanup(SndChannel *channel)
> > {
> > +#if HAVE_CELT051
> > RecordChannel *record_channel = SPICE_CONTAINEROF(channel, RecordChannel, base);
> >
> > celt051_decoder_destroy(record_channel->celt_decoder);
> > celt051_mode_destroy(record_channel->celt_mode);
> > +#endif
> > }
> >
> > static void snd_set_record_peer(RedChannel *channel, RedClient *client, RedsStream *stream,
> > @@ -1378,12 +1411,13 @@ static void snd_set_record_peer(RedChannel *channel, RedClient *client, RedsStre
> > SndWorker *worker = channel->data;
> > RecordChannel *record_channel;
> > SpiceRecordState *st = SPICE_CONTAINEROF(worker, SpiceRecordState, worker);
> > - CELTDecoder *celt_decoder;
> > - CELTMode *celt_mode;
> > - int celt_error;
> >
> > snd_disconnect_channel(worker->connection);
> >
> > +#if HAVE_CELT051
> > + CELTDecoder *celt_decoder;
> > + CELTMode *celt_mode;
> > + int celt_error;
> > if (!(celt_mode = celt051_mode_create(SPICE_INTERFACE_RECORD_FREQ,
> > SPICE_INTERFACE_RECORD_CHAN,
> > FRAME_SIZE, &celt_error))) {
> > @@ -1395,6 +1429,7 @@ static void snd_set_record_peer(RedChannel *channel, RedClient *client, RedsStre
> > spice_printerr("create celt decoder failed");
> > goto error_1;
> > }
> > +#endif
> >
> > if (!(record_channel = (RecordChannel *)__new_channel(worker,
> > sizeof(*record_channel),
> > @@ -1413,8 +1448,10 @@ static void snd_set_record_peer(RedChannel *channel, RedClient *client, RedsStre
> >
> > worker->connection = &record_channel->base;
> >
> > +#if HAVE_CELT051
> > record_channel->celt_mode = celt_mode;
> > record_channel->celt_decoder = celt_decoder;
> > +#endif
> >
> > on_new_record_channel(worker);
> > if (worker->active) {
> > @@ -1424,10 +1461,13 @@ static void snd_set_record_peer(RedChannel *channel, RedClient *client, RedsStre
> > return;
> >
> > error_2:
> > +#if HAVE_CELT051
> > celt051_decoder_destroy(celt_decoder);
> >
> > error_1:
> > celt051_mode_destroy(celt_mode);
> > +#endif
> > + return;
> > }
> >
> > static void snd_playback_migrate_channel_client(RedChannelClient *rcc)
> > @@ -1483,7 +1523,9 @@ void snd_attach_playback(SpicePlaybackInstance *sin)
> > client_cbs.migrate = snd_playback_migrate_channel_client;
> > red_channel_register_client_cbs(channel, &client_cbs);
> > red_channel_set_data(channel, playback_worker);
> > +#if HAVE_CELT051
> > red_channel_set_cap(channel, SPICE_PLAYBACK_CAP_CELT_0_5_1);
> > +#endif
> > red_channel_set_cap(channel, SPICE_PLAYBACK_CAP_VOLUME);
> >
> > playback_worker->base_channel = channel;
> > @@ -1510,7 +1552,9 @@ void snd_attach_record(SpiceRecordInstance *sin)
> > client_cbs.migrate = snd_record_migrate_channel_client;
> > red_channel_register_client_cbs(channel, &client_cbs);
> > red_channel_set_data(channel, record_worker);
> > +#if HAVE_CELT051
> > red_channel_set_cap(channel, SPICE_RECORD_CAP_CELT_0_5_1);
> > +#endif
> > red_channel_set_cap(channel, SPICE_RECORD_CAP_VOLUME);
> >
> > record_worker->base_channel = channel;
> > @@ -1557,7 +1601,11 @@ void snd_set_playback_compression(int on)
> > {
> > SndWorker *now = workers;
> >
> > - playback_compression = on ? SPICE_AUDIO_DATA_MODE_CELT_0_5_1 : SPICE_AUDIO_DATA_MODE_RAW;
> > + playback_compression =
> > +#if HAVE_CELT051
> > + on ? SPICE_AUDIO_DATA_MODE_CELT_0_5_1 :
> > +#endif
> > + SPICE_AUDIO_DATA_MODE_RAW;
> > for (; now; now = now->next) {
> > if (now->base_channel->type == SPICE_CHANNEL_PLAYBACK && now->connection) {
> > SndChannel* sndchannel = now->connection;
> > --
> > 1.7.10
> >
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list