[Spice-devel] [spice-gtk sound rework 3/3 (take 4)] Use the new snd_codec interface to process encoded audio.

Christophe Fergeau cfergeau at redhat.com
Fri Nov 8 06:16:38 PST 2013


And a few more comments to that one as well :(

On Tue, Nov 05, 2013 at 04:25:23PM -0600, Jeremy White wrote:
> diff --git a/gtk/channel-playback.c b/gtk/channel-playback.c
> @@ -428,7 +410,6 @@ static void playback_handle_start(SpiceChannel *channel, SpiceMsgIn *in)
>  {
>      SpicePlaybackChannelPrivate *c = SPICE_PLAYBACK_CHANNEL(channel)->priv;
>      SpiceMsgPlaybackStart *start = spice_msg_in_parsed(in);
> -    int celt_mode_err;
>  
>      CHANNEL_DEBUG(channel, "%s: fmt %d channels %d freq %d time %d", __FUNCTION__,
>                    start->format, start->channels, start->frequency, start->time);
> @@ -437,6 +418,7 @@ static void playback_handle_start(SpiceChannel *channel, SpiceMsgIn *in)
>      c->last_time = start->time;
>      c->is_active = TRUE;
>      c->min_latency = SPICE_PLAYBACK_DEFAULT_LATENCY_MS;
> +    c->codec = NULL;
>  
>      switch (c->mode) {
>      case SPICE_AUDIO_DATA_MODE_RAW:
> @@ -444,19 +426,8 @@ static void playback_handle_start(SpiceChannel *channel, SpiceMsgIn *in)
>                            start->format, start->channels, start->frequency);
>          break;
>      case SPICE_AUDIO_DATA_MODE_CELT_0_5_1: {
> -        /* TODO: only support one setting now */
> -        int frame_size = 256;
> -        if (!c->celt_mode)
> -            c->celt_mode = celt051_mode_create(start->frequency, start->channels,
> -                                               frame_size, &celt_mode_err);
> -        if (!c->celt_mode)
> -            g_warning("create celt mode failed %d", celt_mode_err);
> -
> -        if (!c->celt_decoder)
> -            c->celt_decoder = celt051_decoder_create(c->celt_mode);
> -
> -        if (!c->celt_decoder)
> -            g_warning("create celt decoder failed");
> +        if (snd_codec_create(&c->codec, c->mode, start->frequency, FALSE, TRUE) != SND_CODEC_OK)
> +            g_warning("create decoder failed");
>  
>          emit_main_context(channel, SPICE_PLAYBACK_START,
>                            start->format, start->channels, start->frequency);

The issue is preexisting, but I don't think it's correct to emit
SPICE_PLAYBACK_START if we failed to create the decoder, so the code should
probably be:
if (snd_codec_create(&c->codec, c->mode, start->frequency, FALSE, TRUE) != SND_CODEC_OK) {
    g_warning("create decoder failed");
    return
}

> diff --git a/gtk/channel-record.c b/gtk/channel-record.c
> @@ -446,42 +428,25 @@ static void record_handle_start(SpiceChannel *channel, SpiceMsgIn *in)
>      CHANNEL_DEBUG(channel, "%s: fmt %d channels %d freq %d", __FUNCTION__,
>                    start->format, start->channels, start->frequency);
>  
> -    c->frame_bytes = FRAME_SIZE * 16 * start->channels / 8;
> +    g_return_if_fail(start->format == SPICE_AUDIO_FMT_S16);
>  
> -    g_free(c->last_frame);
> -    c->last_frame = g_malloc(c->frame_bytes);
> -    c->last_frame_current = 0;
> +    c->codec = NULL;
> +    c->frame_bytes = SND_CODEC_MAX_FRAME_SIZE * 16 * start->channels / 8;
>  
> -    switch (c->mode) {
> -    case SPICE_AUDIO_DATA_MODE_RAW:
> -        emit_main_context(channel, SPICE_RECORD_START,
> -                          start->format, start->channels, start->frequency);
> -        break;
> -    case SPICE_AUDIO_DATA_MODE_CELT_0_5_1: {
> -        int celt_mode_err;
> -
> -        g_return_if_fail(start->format == SPICE_AUDIO_FMT_S16);
> -
> -        if (!c->celt_mode)
> -            c->celt_mode = celt051_mode_create(start->frequency, start->channels, FRAME_SIZE,
> -                                               &celt_mode_err);
> -        if (!c->celt_mode)
> -            g_warning("Failed to create celt mode");
> +    if (c->mode == SPICE_AUDIO_DATA_MODE_CELT_0_5_1)
> +    {
> +        c->frame_bytes = SND_CODEC_CELT_FRAME_SIZE * 16 * start->channels / 8;
>  
> -        if (!c->celt_encoder)
> -            c->celt_encoder = celt051_encoder_create(c->celt_mode);
> +        if (snd_codec_create(&c->codec, c->mode, start->frequency, TRUE, FALSE) != SND_CODEC_OK)
> +            g_warning("Failed to create encoder");
> +    }
>  
> -        if (!c->celt_encoder)
> -            g_warning("Failed to create celt encoder");
> +    g_free(c->last_frame);
> +    c->last_frame = g_malloc(c->frame_bytes);
> +    c->last_frame_current = 0;
>  
> -        emit_main_context(channel, SPICE_RECORD_START,
> -                          start->format, start->channels, start->frequency);
> -        break;
> -    }
> -    default:
> -        g_warning("%s: unhandled mode %d", __FUNCTION__, c->mode);
> -        break;
> -    }
> +    emit_main_context(channel, SPICE_RECORD_START,
> +                      start->format, start->channels, start->frequency);

Same comment applies here.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20131108/1824bfdb/attachment-0001.pgp>


More information about the Spice-devel mailing list