VirtualBox

Changeset 787 in vbox for trunk/src/VBox/Devices/Audio


Ignore:
Timestamp:
Feb 8, 2007 4:34:04 PM (18 years ago)
Author:
vboxsync
Message:

made ALSA work again

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/alsaaudio.c

    r1 r787  
    4444} ALSAVoiceIn;
    4545
     46/* latency = period_size * periods / (rate * bytes_per_frame) */
     47
    4648static struct {
    4749    int size_in_usec_in;
     
    288290        );
    289291    if (err < 0) {
     292#ifndef VBOX
    290293        alsa_logerr2 (err, typ, "Failed to open `%s':\n", pcm_name);
     294#else
    291295        LogRel(("Audio/ALSA: Failed to open '%s' as %s\n", pcm_name, typ));
     296#endif
    292297        return -1;
    293298    }
     
    295300    err = snd_pcm_hw_params_any (handle, hw_params);
    296301    if (err < 0) {
     302#ifndef VBOX
    297303        alsa_logerr2 (err, typ, "Failed to initialize hardware parameters\n");
     304#else
     305        LogRel(("Audio/ALSA: Failed to initialize hardware parameters\n"));
     306#endif
    298307        goto err;
    299308    }
     
    305314        );
    306315    if (err < 0) {
     316#ifndef VBOX
    307317        alsa_logerr2 (err, typ, "Failed to set access type\n");
     318#else
     319        LogRel(("Audio/ALSA: Failed to set access type\n"));
     320#endif
    308321        goto err;
    309322    }
     
    311324    err = snd_pcm_hw_params_set_format (handle, hw_params, req->fmt);
    312325    if (err < 0) {
     326#ifndef VBOX
    313327        alsa_logerr2 (err, typ, "Failed to set format %d\n", req->fmt);
     328#else
     329        LogRel(("Audio/ALSA: Failed to set format %d\n", req->fmt));
     330#endif
    314331        goto err;
    315332    }
     
    317334    err = snd_pcm_hw_params_set_rate_near (handle, hw_params, &freq, 0);
    318335    if (err < 0) {
     336#ifndef VBOX
    319337        alsa_logerr2 (err, typ, "Failed to set frequency %d\n", req->freq);
     338#else
     339        LogRel(("Audio/ALSA: Failed to set frequency %dHz\n", req->freq));
     340#endif
    320341        goto err;
    321342    }
     
    327348        );
    328349    if (err < 0) {
     350#ifndef VBOX
    329351        alsa_logerr2 (err, typ, "Failed to set number of channels %d\n",
    330352                      req->nchannels);
     353#else
     354        LogRel(("Audio/ALSA: Failed to set number of channels to %d\n", req->nchannels));
     355#endif
    331356        goto err;
    332357    }
    333358
    334359    if (nchannels != 1 && nchannels != 2) {
     360#ifndef VBOX
    335361        alsa_logerr2 (err, typ,
    336362                      "Can not handle obtained number of channels %d\n",
    337363                      nchannels);
     364#else
     365        LogRel(("Audio/ALSA: Cannot handle obtained number of channels (%d)\n", nchannels));
     366#endif
    338367        goto err;
    339368    }
     
    356385                    );
    357386                if (err < 0) {
     387#ifndef VBOX
    358388                    alsa_logerr2 (err, typ,
    359389                                  "Failed to set period time %d\n",
    360390                                  req->period_size);
     391#else
     392                    LogRel(("Audio/ALSA: Failed to set period time %d\n", req->period_size));
     393#endif
    361394                    goto err;
    362395                }
     
    371404
    372405            if (err < 0) {
     406#ifndef VBOX
    373407                alsa_logerr2 (err, typ,
    374408                              "Failed to set buffer time %d\n",
    375409                              req->buffer_size);
     410#else
     411                LogRel(("Audio/ALSA: Failed to set buffer time %d\n", req->buffer_size));
     412#endif
    376413                goto err;
    377414            }
     
    391428                    );
    392429                if (err < 0) {
     430#ifndef VBOX
    393431                    alsa_logerr (
    394432                        err,
     
    396434                        typ
    397435                        );
     436#else
     437                    LogRel(("Audio/ALSA: Could not get minimal period size for %s\n", typ));
     438#endif
    398439                }
    399440                else {
     441                    dolog("minimal period size %ld\n", minval);
    400442                    if (period_size < minval) {
    401443                        if ((in && conf.period_size_in_overriden)
     
    411453                }
    412454
     455#ifndef VBOX
    413456                err = snd_pcm_hw_params_set_period_size (
    414457                    handle,
     
    417460                    0
    418461                    );
     462#else
     463                err = snd_pcm_hw_params_set_period_size_near (
     464                    handle,
     465                    hw_params,
     466                    (snd_pcm_uframes_t*)&period_size,
     467                    0
     468                    );
     469#endif
     470                dolog("PERIOD_SIZE %d\n", period_size);
    419471                if (err < 0) {
     472#ifndef VBOX
    420473                    alsa_logerr2 (err, typ, "Failed to set period size %d\n",
    421                                   req->period_size);
     474                                  period_size);
     475#else
     476                    LogRel(("Audio/ALSA: Failed to set period size %d (%s)\n",
     477                            period_size, snd_strerror(err)));
     478#endif
    422479                    goto err;
    423480                }
    424481            }
     482
     483#ifdef VBOX
     484            /* Calculate default buffer size here since it might have been changed
     485             * in the _near functions */
     486            buffer_size = 4 * period_size;
     487#endif
    425488
    426489            minval = buffer_size;
     
    430493                );
    431494            if (err < 0) {
     495#ifndef VBOX
    432496                alsa_logerr (err, "Could not get minmal buffer size for %s\n",
    433497                             typ);
     498#else
     499                LogRel(("Audio/ALSA: Could not get minimal buffer size for %s\n", typ));
     500#endif
    434501            }
    435502            else {
     
    449516            }
    450517
    451             err = snd_pcm_hw_params_set_buffer_size (
     518            err = snd_pcm_hw_params_set_buffer_size_near (
    452519                handle,
    453520                hw_params,
    454                 buffer_size
     521                (snd_pcm_uframes_t*)&buffer_size
    455522                );
     523            dolog("BUFFER_SIZE %d\n", buffer_size);
    456524            if (err < 0) {
     525#ifndef VBOX
    457526                alsa_logerr2 (err, typ, "Failed to set buffer size %d\n",
    458                               req->buffer_size);
     527                              buffer_size);
     528#else
     529                LogRel(("Audio/ALSA: Failed to set buffer size %d (%s)\n",
     530                        buffer_size, snd_strerror(err)));
     531#endif
    459532                goto err;
    460533            }
     
    467540    err = snd_pcm_hw_params (handle, hw_params);
    468541    if (err < 0) {
     542#ifndef VBOX
    469543        alsa_logerr2 (err, typ, "Failed to apply audio parameters\n");
     544#else
     545        LogRel(("Audio/ALSA: Failed to apply audio parameters\n"));
     546#endif
    470547        goto err;
    471548    }
     
    473550    err = snd_pcm_hw_params_get_buffer_size (hw_params, &obt_buffer_size);
    474551    if (err < 0) {
     552#ifndef VBOX
    475553        alsa_logerr2 (err, typ, "Failed to get buffer size\n");
     554#else
     555        LogRel(("Audio/ALSA: Failed to get buffer size\n"));
     556#endif
    476557        goto err;
    477558    }
     559
     560#ifdef VBOX
     561    LogRel(("Audio/ALSA: %s frequency %dHz, period size %d, buffer size %d\n",
     562             typ, req->freq, period_size, obt_buffer_size));
     563#endif
    478564
    479565    err = snd_pcm_prepare (handle);
     
    619705            }
    620706
    621 #if 0
    622             mixeng_sniff_and_clear (hw, src, dst, written);
    623 #endif
    624707            rpos = (rpos + written) % hw->samples;
    625708            samples -= written;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette