Ticket #5342: alsa_mixer_fix_5342_v1-trunk18117.patch

File alsa_mixer_fix_5342_v1-trunk18117.patch, 3.8 KB (added by Alan Calvert <cal@…>, 16 years ago)
  • libs/libmyth/audiooutputalsa.h

    old new  
    7474
    7575
    7676    // Volume related
    77     void SetCurrentVolume(QString control, int channel, int volume);
     77    void SetCurrentVolume(const char* control, int channel, int volume);
    7878    void OpenMixer(bool setstartingvolume);
    7979    void CloseMixer(void);
    8080    void SetupMixer(void);
     
    8585    int          numbadioctls;
    8686    QMutex       killAudioLock;
    8787    snd_mixer_t *mixer_handle;
    88     QString      mixer_control; // e.g. "PCM"
     88    QByteArray   mixer_control; // e.g. "PCM"
    8989    snd_pcm_sframes_t (*pcm_write_func)(snd_pcm_t*, const void*,
    9090                                        snd_pcm_uframes_t);
    9191};
  • libs/libmyth/audiooutputalsa.cpp

    old new  
    2222    AudioOutputBase(settings),
    2323    pcm_handle(NULL),             numbadioctls(0),
    2424    killAudioLock(false),         mixer_handle(NULL),
    25     mixer_control(QString::null)
     25    mixer_control(QByteArray())
    2626{
    2727    // Set everything up
    2828    Reconfigure(settings);
     
    4545    pcm_handle = NULL;
    4646    numbadioctls = 0;
    4747
    48     QString real_device = (audio_passthru) ?
    49         audio_passthru_device : audio_main_device;
     48    QByteArray pcm_device = (audio_passthru) ? audio_passthru_device.toAscii()
     49                                             : audio_main_device.toAscii();
    5050
    5151    VERBOSE(VB_GENERAL, QString("Opening ALSA audio device '%1'.")
    52             .arg(real_device));
     52            .arg(pcm_device.constData()));
    5353
    54     err = snd_pcm_open(&pcm_handle, real_device,
     54    err = snd_pcm_open(&pcm_handle, pcm_device.constData(),
    5555                       SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
    5656
    5757    if (err < 0)
    5858    {
    5959        Error(QString("snd_pcm_open(%1): %2")
    60               .arg(real_device).arg(snd_strerror(err)));
     60              .arg(pcm_device.constData()).arg(snd_strerror(err)));
    6161
    6262        if (pcm_handle)
    6363            CloseDevice();
     
    483483    if (mixer_handle == NULL)
    484484        return 100;
    485485
    486     QByteArray mix_ctl = mixer_control.toAscii();
    487486    snd_mixer_selem_id_t *sid;
    488487    snd_mixer_selem_id_alloca(&sid);
    489488    snd_mixer_selem_id_set_index(sid, 0);
    490     snd_mixer_selem_id_set_name(sid, mix_ctl.constData());
     489    snd_mixer_selem_id_set_name(sid, mixer_control.constData());
    491490
    492491    snd_mixer_elem_t *elem = snd_mixer_find_selem(mixer_handle, sid);
    493492    if (!elem)
    494493    {
    495494        VERBOSE(VB_IMPORTANT, QString("Mixer unable to find control %1")
    496                 .arg(mixer_control));
     495                .arg(mixer_control.constData()));
    497496        return 100;
    498497    }
    499498
     
    504503        if ((elem = snd_mixer_find_selem(mixer_handle, sid)) == NULL)
    505504        {
    506505            VERBOSE(VB_IMPORTANT, QString("Mixer unable to find control %1 %2")
    507                     .arg(mixer_control).arg(channel));
     506                    .arg(mixer_control.constData()).arg(channel));
    508507            return 100;
    509508        }
    510509    }
     
    519518
    520519void AudioOutputALSA::SetVolumeChannel(int channel, int volume)
    521520{
    522     SetCurrentVolume(mixer_control, channel, volume);
     521    SetCurrentVolume(mixer_control.constData(), channel, volume);
    523522}
    524523
    525 void AudioOutputALSA::SetCurrentVolume(QString control, int channel, int volume)
     524void AudioOutputALSA::SetCurrentVolume(const char* control, int channel, int volume)
    526525{
    527526    VERBOSE(VB_AUDIO, QString("Setting %1 volume to %2")
    528527            .arg(control).arg(volume));
     
    530529    if (!mixer_handle)
    531530        return; // no mixer, nothing to do
    532531
    533     QByteArray ctl = control.toAscii();
    534532    snd_mixer_selem_id_t *sid;
    535533    snd_mixer_selem_id_alloca(&sid);
    536534    snd_mixer_selem_id_set_index(sid, 0);
    537     snd_mixer_selem_id_set_name(sid, ctl.constData());
     535    snd_mixer_selem_id_set_name(sid, control);
    538536
    539537    snd_mixer_elem_t *elem = snd_mixer_find_selem(mixer_handle, sid);
    540538    if (!elem)