~ubuntu-branches/ubuntu/raring/spice/raring-proposed

« back to all changes in this revision

Viewing changes to client/playback_channel.cpp

  • Committer: Package Import Robot
  • Author(s): Dustin Kirkland, Serge Hallyn
  • Date: 2013-02-01 17:45:22 UTC
  • Revision ID: package-import@ubuntu.com-20130201174522-x5lb0l362hh40brr
Tags: 0.12.0-0ubuntu2
[ Serge Hallyn ]
debian/patches/fix-missing-PIXEL-pointer-cast: address compiler warning in
the spice-common code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
151
151
                 Platform::PRIORITY_HIGH)
152
152
    , _wave_player (NULL)
153
153
    , _mode (SPICE_AUDIO_DATA_MODE_INVALID)
 
154
#if HAVE_CELT051
154
155
    , _celt_mode (NULL)
155
156
    , _celt_decoder (NULL)
 
157
#endif
156
158
    , _playing (false)
157
159
{
158
160
#ifdef WAVE_CAPTURE
169
171
 
170
172
    handler->set_handler(SPICE_MSG_PLAYBACK_MODE, &PlaybackChannel::handle_mode);
171
173
 
 
174
#if HAVE_CELT051
172
175
    set_capability(SPICE_PLAYBACK_CAP_CELT_0_5_1);
 
176
#endif
173
177
}
174
178
 
175
179
void PlaybackChannel::clear()
182
186
    }
183
187
    _mode = SPICE_AUDIO_DATA_MODE_INVALID;
184
188
 
 
189
#if HAVE_CELT051
185
190
    if (_celt_decoder) {
186
191
        celt051_decoder_destroy(_celt_decoder);
187
192
        _celt_decoder = NULL;
191
196
        celt051_mode_destroy(_celt_mode);
192
197
        _celt_mode = NULL;
193
198
    }
 
199
#endif
194
200
}
195
201
 
196
202
void PlaybackChannel::on_disconnect()
214
220
 
215
221
    if (_mode == SPICE_AUDIO_DATA_MODE_RAW) {
216
222
        handler->set_handler(SPICE_MSG_PLAYBACK_DATA, &PlaybackChannel::handle_raw_data);
 
223
#if HAVE_CELT051
217
224
    } else if (_mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
218
225
        handler->set_handler(SPICE_MSG_PLAYBACK_DATA, &PlaybackChannel::handle_celt_data);
 
226
#endif
219
227
    } else {
220
228
        THROW("invalid mode");
221
229
    }
224
232
void PlaybackChannel::handle_mode(RedPeer::InMessage* message)
225
233
{
226
234
    SpiceMsgPlaybackMode* playbacke_mode = (SpiceMsgPlaybackMode*)message->data();
227
 
    if (playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_RAW &&
228
 
        playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_CELT_0_5_1) {
 
235
    if (playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_RAW
 
236
#if HAVE_CELT051
 
237
        && playbacke_mode->mode != SPICE_AUDIO_DATA_MODE_CELT_0_5_1
 
238
#endif
 
239
       ) {
229
240
        THROW("invalid mode");
230
241
    }
231
242
 
265
276
    start_wave();
266
277
#endif
267
278
    if (!_wave_player) {
268
 
        // for now support only one setting
269
 
        int celt_mode_err;
270
 
 
271
279
        if (start->format != SPICE_AUDIO_FMT_S16) {
272
280
            THROW("unexpected format");
273
281
        }
284
292
            return;
285
293
        }
286
294
 
 
295
#if HAVE_CELT051
 
296
        // for now support only one setting
 
297
        int celt_mode_err;
 
298
 
287
299
        if (!(_celt_mode = celt051_mode_create(start->frequency, start->channels,
288
300
                                               frame_size, &celt_mode_err))) {
289
301
            THROW("create celt mode failed %d", celt_mode_err);
292
304
        if (!(_celt_decoder = celt051_decoder_create(_celt_mode))) {
293
305
            THROW("create celt decoder");
294
306
        }
 
307
#endif
295
308
    }
296
309
    _playing = true;
297
310
    _frame_count = 0;
333
346
    _wave_player->write(data);
334
347
}
335
348
 
 
349
#if HAVE_CELT051
336
350
void PlaybackChannel::handle_celt_data(RedPeer::InMessage* message)
337
351
{
338
352
    SpiceMsgPlaybackPacket* packet = (SpiceMsgPlaybackPacket*)message->data();
352
366
    }
353
367
    _wave_player->write((uint8_t *)pcm);
354
368
}
 
369
#endif
355
370
 
356
371
class PlaybackFactory: public ChannelFactory {
357
372
public: