Ticket #1598: audiopassthru.patch

File audiopassthru.patch, 24.9 KB (added by Martin Ebourne <martin@…>, 19 years ago)

Generic solution - allows user to specify separate passthru device

  • mythplugins/mythmusic/mythmusic/playbackbox.cpp

     
    18151815        adevice = gContext->GetSetting("MusicAudioDevice");
    18161816 
    18171817    // TODO: Error checking that device is opened correctly!
    1818     output = AudioOutput::OpenAudio(adevice, 16, 2, 44100,
     1818    output = AudioOutput::OpenAudio(adevice, "default", 16, 2, 44100,
    18191819                                    AUDIOOUTPUT_MUSIC, true,
    18201820                                    false /* AC3/DTS pass through */);
    18211821    output->setBufferSize(outputBufferSize * 1024);
  • mythplugins/mythphone/mythphone/audiodrv.cpp

     
    835835        cerr << "Cannot have matching spk and mic devices in this mode, should have chosen OSS mode\n";
    836836    else
    837837    {
    838         mythOutput = AudioOutput::OpenAudio(spkDevice, 16, 1, 8000,
     838        mythOutput = AudioOutput::OpenAudio(spkDevice, "default", 16, 1, 8000,
    839839                                            AUDIOOUTPUT_TELEPHONY, true,
    840840                                            false /* AC3/DTS pass through */);
    841841        if (mythOutput)
  • mythplugins/mythphone/mythphone/tone.cpp

     
    305305        return;
    306306
    307307#else
    308     mythOutput = AudioOutput::OpenAudio(devName, 16, 1, 8000,
     308    mythOutput = AudioOutput::OpenAudio(devName, "default", 16, 1, 8000,
    309309                                        AUDIOOUTPUT_TELEPHONY, true,
    310310                                        false /* AC3/DTS pass through */);
    311311    if (mythOutput)
  • mythtv/libs/libmythtv/NuppelVideoPlayer.cpp

     
    188188      osd(NULL),                    timedisplay(NULL),
    189189      dialogname(""),               dialogtype(0),
    190190      // Audio stuff
    191       audioOutput(NULL),            audiodevice("/dev/dsp"),
     191      audioOutput(NULL),
     192      audiodevice("/dev/dsp"),      audio_passthrudevice("default"),
    192193      audio_channels(2),            audio_bits(-1),
    193194      audio_samplerate(44100),      audio_stretchfactor(1.0f),
    194195      // Picture-in-Picture
     
    623624    if (!audioOutput && !using_null_videoout)
    624625    {
    625626        bool setVolume = gContext->GetNumSetting("MythControlsVolume", 1);
    626         audioOutput = AudioOutput::OpenAudio(audiodevice, audio_bits,
    627                                              audio_channels, audio_samplerate,
     627        audioOutput = AudioOutput::OpenAudio(audiodevice, audio_passthrudevice,
     628                                             audio_bits, audio_channels,
     629                                             audio_samplerate,
    628630                                             AUDIOOUTPUT_VIDEO,
    629631                                             setVolume, audio_passthru);
    630632        if (!audioOutput)
  • mythtv/libs/libmythtv/NuppelVideoPlayer.h

     
    122122    void SetNoAudio(void)                     { no_audio_out = true; }
    123123    void SetNullVideo(void)                   { using_null_videoout = true; }
    124124    void SetAudioDevice(QString device)       { audiodevice = device; }
     125    void SetAudioPassThruDevice(QString device) { audio_passthrudevice = device; }
    125126    void SetFileName(QString lfilename)       { filename = lfilename; }
    126127    void SetExactSeeks(bool exact)            { exactseeks = exact; }
    127128    void SetAutoCommercialSkip(int autoskip);
     
    652653    // Audio stuff
    653654    AudioOutput *audioOutput;
    654655    QString  audiodevice;
     656    QString  audio_passthrudevice;
    655657    int      audio_channels;
    656658    int      audio_bits;
    657659    int      audio_samplerate;
  • mythtv/libs/libmythtv/tv_play.cpp

     
    12861286    nvp->SetRecorder(recorder);
    12871287    nvp->SetAudioSampleRate(gContext->GetNumSetting("AudioSampleRate", 44100));
    12881288    nvp->SetAudioDevice(gContext->GetSetting("AudioOutputDevice"));
     1289    nvp->SetAudioPassThruDevice(gContext->GetSetting("PassThruOutputDevice"));
    12891290    nvp->SetLength(playbackLen);
    12901291    nvp->SetExactSeeks(gContext->GetNumSetting("ExactSeeking", 0));
    12911292    nvp->SetAutoCommercialSkip(autoCommercialSkip);
     
    13581359    pipnvp->SetRecorder(piprecorder);
    13591360    pipnvp->SetAudioSampleRate(gContext->GetNumSetting("AudioSampleRate", 44100));
    13601361    pipnvp->SetAudioDevice(gContext->GetSetting("AudioOutputDevice"));
     1362    pipnvp->SetAudioPassThruDevice(gContext->GetSetting("PassThruOutputDevice"));
    13611363    pipnvp->SetExactSeeks(gContext->GetNumSetting("ExactSeeking", 0));
    13621364    pipnvp->SetLiveTVChain(piptvchain);
    13631365
  • mythtv/libs/libmyth/audiooutputjack.h

     
    1212class AudioOutputJACK : public AudioOutputBase
    1313{
    1414  public:
    15     AudioOutputJACK(QString audiodevice, int laudio_bits,
     15    AudioOutputJACK(QString audiodevice, QString passthrudevice,
     16                    int laudio_bits,
    1617                    int laudio_channels, int laudio_samplerate,
    1718                    AudioOutputSource source,
    1819                    bool set_initial_vol, bool laudio_passthru);
  • mythtv/libs/libmyth/audiooutputbase.h

     
    2323class AudioOutputBase : public AudioOutput
    2424{
    2525 public:
    26     AudioOutputBase(QString audiodevice, int laudio_bits,
     26    AudioOutputBase(QString audiodevice, QString passthrudevice,
     27                    int laudio_bits,
    2728                    int laudio_channels, int laudio_samplerate,
    2829                    AudioOutputSource source,
    2930                    bool set_initial_vol, bool laudio_passthru);
     
    110111    int fragment_size;
    111112    long soundcard_buffer_size;
    112113    QString audiodevice;
     114    QString passthrudevice;
    113115
    114116    bool audio_passthru;
    115117
  • mythtv/libs/libmyth/audiooutputalsa.cpp

     
    1010#include "audiooutputalsa.h"
    1111   
    1212
    13 AudioOutputALSA::AudioOutputALSA(QString audiodevice, int laudio_bits,
     13AudioOutputALSA::AudioOutputALSA(QString audiodevice, QString passthrudevice,
     14                                 int laudio_bits,
    1415                                 int laudio_channels, int laudio_samplerate,
    1516                                 AudioOutputSource source,
    1617                                 bool set_initial_vol, bool laudio_passthru)
    17     : AudioOutputBase(audiodevice, laudio_bits,
     18    : AudioOutputBase(audiodevice, passthrudevice, laudio_bits,
    1819                      laudio_channels, laudio_samplerate, source,
    1920                      set_initial_vol, laudio_passthru)
    2021{
     
    4546    pcm_handle = NULL;
    4647    numbadioctls = 0;
    4748
    48     QString real_device = audiodevice;
    49     if (audio_passthru)
    50         real_device.append(":{ AES0 0x02 }");
    51    
     49    QString real_device = audio_passthru ? passthrudevice : audiodevice;
     50
     51    VERBOSE(VB_GENERAL, QString("Opening ALSA audio device '%1'.")
     52            .arg(real_device));
     53
    5254    err = snd_pcm_open(&pcm_handle, real_device,
    53           SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
     55                       SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
    5456
    5557    if (err < 0)
    5658    {
  • mythtv/libs/libmyth/audiooutputca.cpp

     
    3737                       AudioBufferList *ioData);
    3838
    3939
    40 AudioOutputCA::AudioOutputCA(QString audiodevice, int laudio_bits,
     40AudioOutputCA::AudioOutputCA(QString audiodevice, QString passthrudevice,
     41                             int laudio_bits,
    4142                             int laudio_channels, int laudio_samplerate,
    4243                             AudioOutputSource source,
    4344                             bool set_initial_vol, bool laudio_passthru)
    44     : AudioOutputBase(audiodevice, laudio_bits,
     45    : AudioOutputBase(audiodevice, passthrudevice, laudio_bits,
    4546                      laudio_channels, laudio_samplerate, source,
    4647                      set_initial_vol, laudio_passthru)
    4748{
  • mythtv/libs/libmyth/audiooutputjack.cpp

     
    2121#include "bio2jack.h"
    2222}
    2323
    24 AudioOutputJACK::AudioOutputJACK(QString audiodevice, int laudio_bits,
     24AudioOutputJACK::AudioOutputJACK(QString audiodevice, QString passthrudevice,
     25                                 int laudio_bits,
    2526                                 int laudio_channels, int laudio_samplerate,
    2627                                 AudioOutputSource source,
    2728                                 bool set_initial_vol, bool laudio_passthru)
    28     : AudioOutputBase(audiodevice, laudio_bits,
     29    : AudioOutputBase(audiodevice, passthrudevice, laudio_bits,
    2930                      laudio_channels, laudio_samplerate, source,
    3031                      set_initial_vol, laudio_passthru)
    3132{
     
    5455    unsigned long jack_port_flags=JackPortIsPhysical;
    5556    unsigned int jack_port_name_count=0;
    5657    const char *jack_port_name=NULL;
    57    
     58
     59    VERBOSE(VB_GENERAL, QString("Opening JACK audio device '%1'.")
     60            .arg(audiodevice));
     61
    5862    if (!audiodevice.isEmpty()) {
    5963        jack_port_flags = 0;
    6064        jack_port_name_count = 1;
  • mythtv/libs/libmyth/audiooutputoss.h

     
    1313class AudioOutputOSS : public AudioOutputBase
    1414{
    1515public:
    16     AudioOutputOSS(QString audiodevice, int laudio_bits,
     16    AudioOutputOSS(QString audiodevice, QString passthrudevice,
     17                   int laudio_bits,
    1718                   int laudio_channels, int laudio_samplerate,
    1819                   AudioOutputSource source, bool set_initial_vol,
    1920                   bool laudio_passthru);
  • mythtv/libs/libmyth/audiooutputbase.cpp

     
    1313#include <unistd.h>
    1414
    1515
    16 AudioOutputBase::AudioOutputBase(QString audiodevice, int,
    17                                  int, int,
     16AudioOutputBase::AudioOutputBase(QString audiodevice, QString passthrudevice,
     17                                 int, int, int,
    1818                                 AudioOutputSource source,
    1919                                 bool set_initial_vol,
    2020                                 bool /*laudio_passthru*/)
     
    2323    pthread_mutex_init(&avsync_lock, NULL);
    2424    pthread_cond_init(&audio_bufsig, NULL);
    2525    this->audiodevice = audiodevice;
     26    this->passthrudevice = passthrudevice;
    2627
    2728    output_audio = 0;
    2829    audio_bits = -1;
     
    141142   
    142143    numlowbuffer = 0;
    143144
    144     VERBOSE(VB_GENERAL, QString("Opening audio device '%1'.")
    145             .arg(audiodevice));
    146    
    147145    // Actually do the device specific open call
    148146    if (!OpenDevice())
    149147    {
  • mythtv/libs/libmyth/audiooutput.cpp

     
    3232#include "audiooutputjack.h"
    3333#endif
    3434
    35 AudioOutput *AudioOutput::OpenAudio(QString audiodevice, int audio_bits,
     35AudioOutput *AudioOutput::OpenAudio(QString audiodevice, QString passthrudevice,
     36                                    int audio_bits,
    3637                                    int audio_channels, int audio_samplerate,
    3738                                    AudioOutputSource source,
    3839                                    bool set_initial_vol, bool audio_passthru)
    3940{
     41    if (passthrudevice=="" || passthrudevice.lower()=="default")
     42    {
     43        passthrudevice = audiodevice;
     44    }
     45
    4046    if (audiodevice.startsWith("ALSA:"))
    4147    {
    4248#ifdef USE_ALSA
    43         return new AudioOutputALSA(audiodevice.remove(0, 5), audio_bits,
     49        return new AudioOutputALSA(audiodevice.remove(0, 5),
     50                                   passthrudevice.remove(0, 5), audio_bits,
    4451                                   audio_channels, audio_samplerate, source,
    4552                                   set_initial_vol, audio_passthru);
    4653#else
     
    5158    }
    5259    else if (audiodevice.startsWith("NULL"))
    5360    {
    54         return new AudioOutputNULL(audiodevice, audio_bits,
     61        return new AudioOutputNULL(audiodevice, passthrudevice, audio_bits,
    5562                                   audio_channels, audio_samplerate, source,
    5663                                   set_initial_vol, audio_passthru);
    5764    }
    5865    else if (audiodevice.startsWith("ARTS:"))
    5966    {
    6067#ifdef USE_ARTS
    61         return new AudioOutputARTS(audiodevice.remove(0, 5), audio_bits,
     68        return new AudioOutputARTS(audiodevice.remove(0, 5),
     69                                   passthrudevice.remove(0, 5), audio_bits,
    6270                                   audio_channels, audio_samplerate, source,
    6371                                   set_initial_vol, audio_passthru);
    6472#else
     
    7078    else if (audiodevice.startsWith("JACK:"))
    7179    {
    7280#ifdef USE_JACK
    73         return new AudioOutputJACK(audiodevice.remove(0, 5), audio_bits,
     81        return new AudioOutputJACK(audiodevice.remove(0, 5),
     82                                   passthrudevice.remove(0, 5), audio_bits,
    7483                                   audio_channels, audio_samplerate, source,
    7584                                   set_initial_vol, audio_passthru);
    7685#else
     
    8190    }
    8291#if defined(USING_DIRECTX)
    8392    else
    84         return new AudioOutputDX(audiodevice, audio_bits,
     93        return new AudioOutputDX(audiodevice, passthrudevice, audio_bits,
    8594                                 audio_channels, audio_samplerate, source,
    8695                                 set_initial_vol, audio_passthru);
    8796#elif defined(USING_OSS)
    8897    else
    89         return new AudioOutputOSS(audiodevice, audio_bits,
     98        return new AudioOutputOSS(audiodevice, passthrudevice, audio_bits,
    9099                                  audio_channels, audio_samplerate, source,
    91100                                  set_initial_vol, audio_passthru);
    92101#elif defined(CONFIG_DARWIN)
    93102    else
    94         return new AudioOutputCA(audiodevice, audio_bits,
     103        return new AudioOutputCA(audiodevice, passthrudevice, audio_bits,
    95104                                 audio_channels, audio_samplerate, source,
    96105                                 set_initial_vol, audio_passthru);
    97106#endif
  • mythtv/libs/libmyth/audiooutputca.h

     
    1717class AudioOutputCA : public AudioOutputBase
    1818{
    1919public:
    20     AudioOutputCA(QString audiodevice, int laudio_bits,
     20    AudioOutputCA(QString audiodevice, QString passthrudevice,
     21                  int laudio_bits,
    2122                  int laudio_channels, int laudio_samplerate,
    2223                  AudioOutputSource source,
    2324                  bool set_initial_vol, bool laudio_passthru);
  • mythtv/libs/libmyth/audiooutputoss.cpp

     
    2525#include "audiooutputoss.h"
    2626#include "util.h"
    2727
    28 AudioOutputOSS::AudioOutputOSS(QString audiodevice, int laudio_bits,
     28AudioOutputOSS::AudioOutputOSS(QString audiodevice, QString passthrudevice,
     29                               int laudio_bits,
    2930                               int laudio_channels, int laudio_samplerate,
    3031                               AudioOutputSource source, bool set_initial_vol,
    3132                               bool laudio_passthru)
    32     : AudioOutputBase(audiodevice, laudio_bits,
     33    : AudioOutputBase(audiodevice, passthrudevice, laudio_bits,
    3334                      laudio_channels, laudio_samplerate, source,
    3435                      set_initial_vol, laudio_passthru)
    3536{
  • mythtv/libs/libmyth/audiooutputarts.cpp

     
    77#include "mythcontext.h"
    88#include "audiooutputarts.h"
    99
    10 AudioOutputARTS::AudioOutputARTS(QString audiodevice, int audio_bits,
     10AudioOutputARTS::AudioOutputARTS(QString audiodevice, QString passthrudevice,
     11                                 int audio_bits,
    1112                                 int audio_channels, int audio_samplerate,
    1213                                 AudioOutputSource source,
    1314                                 bool set_initial_vol, bool audio_passthru)
    14     : AudioOutputBase(audiodevice, audio_bits, audio_channels,
     15    : AudioOutputBase(audiodevice, passthrudevice, audio_bits, audio_channels,
    1516                      audio_samplerate, source, set_initial_vol,
    1617                      audio_passthru)
    1718{
  • mythtv/libs/libmyth/audiooutputdx.cpp

     
    9696
    9797
    9898AudioOutputDX::AudioOutputDX(
    99     QString laudiodevice, int laudio_bits,
     99    QString laudiodevice,  QString lpassthrudevice, int laudio_bits,
    100100    int laudio_channels, int laudio_samplerate,
    101101    AudioOutputSource lsource, bool lset_initial_vol, bool laudio_passthru)
    102     : AudioOutputBase(laudiodevice, laudio_bits,
     102  : AudioOutputBase(laudiodevice, lpassthrudevice, laudio_bits,
    103103                      laudio_channels, laudio_samplerate,
    104104                      lsource, lset_initial_vol, laudio_passthru),
    105105      dsound_dll(NULL),
  • mythtv/libs/libmyth/audiooutputnull.h

     
    2424class AudioOutputNULL : public AudioOutputBase
    2525{
    2626public:
    27     AudioOutputNULL(QString audiodevice, int laudio_bits,
    28                    int laudio_channels, int laudio_samplerate,
    29                    AudioOutputSource source,
     27    AudioOutputNULL(QString audiodevice, QString passthrudevice,
     28                    int laudio_bits,
     29                    int laudio_channels, int laudio_samplerate,
     30                    AudioOutputSource source,
    3031                    bool set_initial_vol, bool laudio_passthru);
    3132    virtual ~AudioOutputNULL();
    3233
  • mythtv/libs/libmyth/audiooutput.h

     
    1818{
    1919 public:
    2020    // opens one of the concrete subclasses
    21     static AudioOutput *OpenAudio(QString audiodevice, int audio_bits,
     21    static AudioOutput *OpenAudio(QString audiodevice, QString passthrudevice,
     22                                  int audio_bits,
    2223                                  int audio_channels, int audio_samplerate,
    2324                                  AudioOutputSource source,
    2425                                  bool set_initial_vol, bool audio_passthru);
  • mythtv/libs/libmyth/audiooutputnull.cpp

     
    1616#include "mythcontext.h"
    1717#include "audiooutputnull.h"
    1818
    19 AudioOutputNULL::AudioOutputNULL(QString audiodevice, int laudio_bits,
     19AudioOutputNULL::AudioOutputNULL(QString audiodevice, QString passthrudevice,
     20                                 int laudio_bits,
    2021                                 int laudio_channels, int laudio_samplerate,
    2122                                 AudioOutputSource source, bool set_initial_vol,
    2223                                 bool laudio_passthru)
    23                : AudioOutputBase(audiodevice, laudio_bits, laudio_channels,
    24                                  laudio_samplerate, source, set_initial_vol,
    25                                  laudio_passthru)
     24               : AudioOutputBase(audiodevice, passthrudevice, laudio_bits,
     25                                 laudio_channels, laudio_samplerate, source,
     26                                 set_initial_vol, laudio_passthru)
    2627{
    2728    locked_audio_channels = laudio_channels;
    2829    locked_audio_bits = laudio_bits;
     
    3839
    3940bool AudioOutputNULL::OpenDevice()
    4041{
     42    VERBOSE(VB_GENERAL, "Opening NULL audio device.");
     43   
    4144    fragment_size = NULLAUDIO_OUTPUT_BUFFER_SIZE / 2;
    4245    soundcard_buffer_size = NULLAUDIO_OUTPUT_BUFFER_SIZE;
    4346   
  • mythtv/libs/libmyth/audiooutputarts.h

     
    1414class AudioOutputARTS : public AudioOutputBase
    1515{
    1616  public:
    17      AudioOutputARTS(QString audiodevice, int audio_bits,
     17     AudioOutputARTS(QString audiodevice, QString passthrudevice, int audio_bits,
    1818                     int audio_channels, int audio_samplerate,
    1919                     AudioOutputSource source,
    2020                     bool set_initial_vol, bool laudio_passthru);
  • mythtv/libs/libmyth/audiooutputdx.h

     
    1717class AudioOutputDX : public AudioOutputBase
    1818{
    1919public:
    20     AudioOutputDX(QString audiodevice, int audio_bits,
     20    AudioOutputDX(QString audiodevice, QString passthrudevice,
     21                  int audio_bits,
    2122                  int audio_channels, int audio_samplerate,
    2223                  AudioOutputSource source,
    2324                  bool set_initial_vol, bool laudio_passthru);
  • mythtv/libs/libmyth/audiooutputalsa.h

     
    1616class AudioOutputALSA : public AudioOutputBase
    1717{
    1818  public:
    19     AudioOutputALSA(QString audiodevice, int laudio_bits,
     19    AudioOutputALSA(QString audiodevice, QString passthrudevice,
     20                    int laudio_bits,
    2021                    int laudio_channels, int laudio_samplerate,
    2122                    AudioOutputSource source,
    2223                    bool set_initial_vol, bool laudio_passthru);
  • mythtv/programs/mythfrontend/globalsettings.cpp

     
    4343    return gc;
    4444}
    4545
     46static HostComboBox *PassThroughOutputDevice()
     47{
     48    HostComboBox *gc = new HostComboBox("PassThruOutputDevice", true);
     49
     50    gc->setLabel(QObject::tr("Passthrough output device"));
     51    gc->addSelection(QObject::tr("Default"), "Default");
     52    gc->addSelection("ALSA:iec958:{ AES0 0x02 }", "ALSA:iec958:{ AES0 0x02 }");
     53
     54    gc->setHelpText(QObject::tr("Audio output device to use for AC3 and "
     55                    "DTS passthrough. Default is the same as Audio output "
     56                    "device. This value is currently only used with ALSA "
     57                    "sound output."));
     58    return gc;
     59}
     60
    4661static HostCheckBox *MythControlsVolume()
    4762{
    4863    HostCheckBox *gc = new HostCheckBox("MythControlsVolume");
     
    22752290         setUseLabel(false);
    22762291
    22772292         addChild(AudioOutputDevice());
     2293         addChild(PassThroughOutputDevice());
    22782294         addChild(AC3PassThrough());
    22792295#ifdef CONFIG_DTS
    22802296         addChild(DTSPassThrough());