Ticket #1105: mythtv-ac3-spdif-fix.patch

File mythtv-ac3-spdif-fix.patch, 24.5 KB (added by funaho@…, 14 years ago)

Patch against SVN 8701 mythtv

  • libs/libmythtv/NuppelVideoPlayer.h

     
    106106    void SetVideoParams(int w, int h, double fps, int keydist,
    107107                        float a = 1.33333, FrameScanType scan = kScan_Ignore,
    108108                        bool reinit = false);
    109     void SetAudioParams(int bits, int channels, int samplerate);
     109    void SetAudioParams(int bits, int channels, int samplerate, bool passthru);
    110110    void SetEffDsp(int dsprate);
    111111    void SetFileLength(int total, int frames);
    112112    void Zoom(int direction);
     
    487487    int      audio_bits;
    488488    int      audio_samplerate;
    489489    float    audio_stretchfactor;
     490    bool     audio_passthru;
    490491
    491492    // Picture-in-Picture
    492493    NuppelVideoPlayer *pipplayer;
  • libs/libmythtv/nuppeldecoder.cpp

     
    474474#endif
    475475        GetNVP()->SetAudioParams(extradata.audio_bits_per_sample,
    476476                                 extradata.audio_channels,
    477                                  extradata.audio_sample_rate);
     477                                 extradata.audio_sample_rate, 0);
    478478        GetNVP()->ReinitAudio();
    479479        foundit = 1;
    480480    }
  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    488488        audioOutput = AudioOutput::OpenAudio(audiodevice, audio_bits,
    489489                                             audio_channels, audio_samplerate,
    490490                                             AUDIOOUTPUT_VIDEO,
    491                                              setVolume);
     491                                             setVolume, audio_passthru);
    492492        if (!audioOutput)
    493493            errMsg = QObject::tr("Unable to create AudioOutput.");
    494494        else
     
    514514
    515515    if (audioOutput)
    516516    {
    517         audioOutput->Reconfigure(audio_bits, audio_channels, audio_samplerate);
     517        audioOutput->Reconfigure(audio_bits, audio_channels, audio_samplerate, audio_passthru);
    518518        errMsg = audioOutput->GetError();
    519519        if (!errMsg.isEmpty())
    520520            audioOutput->SetStretchFactor(audio_stretchfactor);
     
    25272527    }
    25282528}
    25292529
    2530 void NuppelVideoPlayer::SetAudioParams(int bps, int channels, int samplerate)
     2530void NuppelVideoPlayer::SetAudioParams(int bps, int channels, int samplerate, bool passthru)
    25312531{
    25322532    audio_bits = bps;
    25332533    audio_channels = channels;
    25342534    audio_samplerate = samplerate;
     2535    audio_passthru = passthru;
    25352536}
    25362537
    25372538void NuppelVideoPlayer::SetEffDsp(int dsprate)
  • libs/libmythtv/avformatdecoder.cpp

     
    11811181    // waiting on audio.
    11821182    if (GetNVP()->HasAudioIn() && audioStreams.empty())
    11831183    {
    1184         GetNVP()->SetAudioParams(-1, -1, -1);
     1184        GetNVP()->SetAudioParams(-1, -1, -1, 0);
    11851185        GetNVP()->ReinitAudio();
    11861186    }
    11871187
     
    27332733        GetNVP()->SetEffDsp(audioOut.sample_rate * 100);
    27342734
    27352735    GetNVP()->SetAudioParams(audioOut.bps(), audioOut.channels,
    2736                              audioOut.sample_rate);
     2736                             audioOut.sample_rate,
     2737                             audioIn.do_passthru);
    27372738    GetNVP()->ReinitAudio();
    27382739
    27392740    return true;
  • libs/libmyth/audiooutputjack.h

     
    1414  public:
    1515    AudioOutputJACK(QString audiodevice, int laudio_bits,
    1616                    int laudio_channels, int laudio_samplerate,
    17                     AudioOutputSource source, bool set_initial_vol);
     17                    AudioOutputSource source, bool set_initial_vol,
     18                    bool laudio_passthru);
    1819    virtual ~AudioOutputJACK();
    1920   
    2021    // Volume control
  • libs/libmyth/audiooutputbase.h

     
    1919 public:
    2020    AudioOutputBase(QString audiodevice, int laudio_bits,
    2121                    int laudio_channels, int laudio_samplerate,
    22                     AudioOutputSource source, bool set_initial_vol);
     22                    AudioOutputSource source, bool set_initial_vol,
     23                    bool laudio_passthru);
    2324    virtual ~AudioOutputBase();
    2425
    2526    // reconfigure sound out for new params
    26     virtual void Reconfigure(int audio_bits,
    27                              int audio_channels, int audio_samplerate);
     27    virtual void Reconfigure(int audio_bits, int audio_channels,
     28                             int audio_samplerate, bool audio_passthru);
    2829   
    2930    // do AddSamples calls block?
    3031    virtual void SetBlocking(bool blocking);
     
    106107    long soundcard_buffer_size;
    107108    QString audiodevice;
    108109
     110    bool audio_passthru;
     111
    109112    float audio_stretchfactor;
    110113    AudioOutputSource source;
    111114
  • libs/libmyth/audiooutputalsa.cpp

     
    1212
    1313AudioOutputALSA::AudioOutputALSA(QString audiodevice, int laudio_bits,
    1414                                 int laudio_channels, int laudio_samplerate,
    15                                  AudioOutputSource source, bool set_initial_vol)
     15                                 AudioOutputSource source, bool set_initial_vol,
     16                                 bool laudio_passthru)
    1617              : AudioOutputBase(audiodevice, laudio_bits,
    17                               laudio_channels, laudio_samplerate, source, set_initial_vol)
     18                              laudio_channels, laudio_samplerate, source, set_initial_vol,
     19                              laudio_passthru)
    1820{
    1921    // our initalisation
    2022    pcm_handle = NULL;
     
    2224    mixer_handle = NULL;
    2325
    2426    // Set everything up
    25     Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
     27    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
    2628}
    2729
    2830AudioOutputALSA::~AudioOutputALSA()
     
    4143
    4244    pcm_handle = NULL;
    4345    numbadioctls = 0;
     46
     47    QString real_device = QString(audiodevice);
     48    if (audio_passthru)
     49        real_device.append(":{ AES0 0x02 }");
    4450   
    45     err = snd_pcm_open(&pcm_handle, audiodevice,
     51    err = snd_pcm_open(&pcm_handle, real_device,
    4652          SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK);
    4753
    4854    if (err < 0)
  • libs/libmyth/audiooutputca.cpp

     
    3838
    3939AudioOutputCA::AudioOutputCA(QString audiodevice, int laudio_bits,
    4040                             int laudio_channels, int laudio_samplerate,
    41                              AudioOutputSource source, bool set_initial_vol)
     41                             AudioOutputSource source, bool set_initial_vol,
     42                             bool laudio_passthru)
    4243             : AudioOutputBase(audiodevice, laudio_bits,
    4344                               laudio_channels, laudio_samplerate,
    44                                source, set_initial_vol)
     45                               source, set_initial_vol, laudio_passthru)
    4546{
    4647    // Create private data
    4748    coreaudio_data = new CoreAudioData();
    4849    coreaudio_data->output_unit = NULL;
    4950   
    50     Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
     51    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
    5152}
    5253
    5354AudioOutputCA::~AudioOutputCA()
  • libs/libmyth/audiooutputjack.cpp

     
    2323
    2424AudioOutputJACK::AudioOutputJACK(QString audiodevice, int laudio_bits,
    2525                                 int laudio_channels, int laudio_samplerate,
    26                                  AudioOutputSource source, bool set_initial_vol)
     26                                 AudioOutputSource source, bool set_initial_vol,
     27                                 bool laudio_passthru)
    2728               : AudioOutputBase(audiodevice, laudio_bits, laudio_channels,
    28                                  laudio_samplerate, source, set_initial_vol)
     29                                 laudio_samplerate, source, set_initial_vol,
     30                                 laudio_passthru)
    2931{
    3032    // Initialise the Jack output layer
    3133    JACK_Init();
     
    3436    audioid = -1;
    3537
    3638    // Set everything up
    37     Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
     39    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
    3840}
    3941
    4042AudioOutputJACK::~AudioOutputJACK()
  • libs/libmyth/audiooutputoss.h

     
    1515public:
    1616    AudioOutputOSS(QString audiodevice, int laudio_bits,
    1717                   int laudio_channels, int laudio_samplerate,
    18                    AudioOutputSource source, bool set_initial_vol);
     18                   AudioOutputSource source, bool set_initial_vol,
     19                   bool laudio_passthru);
    1920    virtual ~AudioOutputOSS();
    2021
    2122    // Volume control
  • libs/libmyth/audiooutputbase.cpp

     
    1515
    1616AudioOutputBase::AudioOutputBase(QString audiodevice, int,
    1717                                 int, int,
    18                                  AudioOutputSource source, bool set_initial_vol)
     18                                 AudioOutputSource source, bool set_initial_vol,
     19                                 bool)
    1920{
    2021    pthread_mutex_init(&audio_buflock, NULL);
    2122    pthread_mutex_init(&avsync_lock, NULL);
     
    4142
    4243    // You need to call the next line from your concrete class.
    4344    // Virtuals cause problems in the base class constructors
    44     // Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
     45    // Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
    4546}
    4647
    4748AudioOutputBase::~AudioOutputBase()
     
    102103}
    103104
    104105void AudioOutputBase::Reconfigure(int laudio_bits, int laudio_channels,
    105                                  int laudio_samplerate)
     106                                 int laudio_samplerate, bool laudio_passthru)
    106107{
    107108    if (laudio_bits == audio_bits && laudio_channels == audio_channels &&
    108         laudio_samplerate == audio_samplerate && !need_resampler)
     109        laudio_samplerate == audio_samplerate &&
     110        laudio_passthru == audio_passthru && !need_resampler)
    109111        return;
    110112
    111113    KillAudio();
     
    120122    audio_channels = laudio_channels;
    121123    audio_bits = laudio_bits;
    122124    audio_samplerate = laudio_samplerate;
     125    audio_passthru = laudio_passthru;
    123126    if (audio_bits != 8 && audio_bits != 16)
    124127    {
    125128        Error("AudioOutput only supports 8 or 16bit audio.");
  • libs/libmyth/audiooutput.cpp

     
    2828
    2929AudioOutput *AudioOutput::OpenAudio(QString audiodevice, int audio_bits,
    3030                                    int audio_channels, int audio_samplerate,
    31                                     AudioOutputSource source, bool set_initial_vol)
     31                                    AudioOutputSource source, bool set_initial_vol,
     32                                    bool audio_passthru)
    3233{
    3334    if (audiodevice.startsWith("ALSA:"))
    3435    {
    3536#ifdef USE_ALSA
    3637        return new AudioOutputALSA(audiodevice.remove(0, 5), audio_bits,
    37                                    audio_channels, audio_samplerate, source, set_initial_vol);
     38                                   audio_channels, audio_samplerate, source,
     39                                   set_initial_vol, audio_passthru);
    3840#else
    3941        VERBOSE(VB_IMPORTANT, "Audio output device is set to an ALSA device "
    4042                              "but ALSA support is not compiled in!");
     
    4446    else if (audiodevice.startsWith("NULL"))
    4547    {
    4648        return new AudioOutputNULL(audiodevice, audio_bits,
    47                                    audio_channels, audio_samplerate, source, set_initial_vol);
     49                                   audio_channels, audio_samplerate, source,
     50                                   set_initial_vol, audio_passthru);
    4851    }
    4952    else if (audiodevice.startsWith("ARTS:"))
    5053    {
    5154#ifdef USE_ARTS
    5255        return new AudioOutputARTS(audiodevice.remove(0, 5), audio_bits,
    53                                    audio_channels, audio_samplerate, source, set_initial_vol);
     56                                   audio_channels, audio_samplerate, source,
     57                                   set_initial_vol, audio_passthru);
    5458#else
    5559        VERBOSE(VB_IMPORTANT, "Audio output device is set to an ARTS device "
    5660                              "but ARTS support is not compiled in!");
     
    7175#if defined(USING_DIRECTX)
    7276    else
    7377        return new AudioOutputDX(audiodevice, audio_bits,
    74                                   audio_channels, audio_samplerate, source, set_initial_vol);
     78                                 audio_channels, audio_samplerate, source,
     79                                 set_initial_vol, audio_passthru);
    7580#elif defined(USING_OSS)
    7681    else
    7782        return new AudioOutputOSS(audiodevice, audio_bits,
    78                                   audio_channels, audio_samplerate, source, set_initial_vol);
     83                                  audio_channels, audio_samplerate, source,
     84                                  set_initial_vol, audio_passthru);
    7985#elif defined(CONFIG_DARWIN)
    8086    else
    8187        return new AudioOutputCA(audiodevice, audio_bits,
    82                                  audio_channels, audio_samplerate, source, set_initial_vol);
     88                                 audio_channels, audio_samplerate, source,
     89                                 set_initial_vol, audio_passthru);
    8390#endif
    8491
    8592    VERBOSE(VB_IMPORTANT, "No useable audio output driver found.");
  • libs/libmyth/audiooutputca.h

     
    1919public:
    2020    AudioOutputCA(QString audiodevice, int laudio_bits,
    2121                  int laudio_channels, int laudio_samplerate,
    22                   AudioOutputSource source, bool set_initial_vol);
     22                  AudioOutputSource source, bool set_initial_vol,
     23                  bool laudio_passthru);
    2324    virtual ~AudioOutputCA();
    2425   
    2526    // callback for delivering audio to output device
  • libs/libmyth/audiooutputoss.cpp

     
    2727
    2828AudioOutputOSS::AudioOutputOSS(QString audiodevice, int laudio_bits,
    2929                               int laudio_channels, int laudio_samplerate,
    30                                AudioOutputSource source, bool set_initial_vol)
     30                               AudioOutputSource source, bool set_initial_vol,
     31                               bool laudio_passthru)
    3132              : AudioOutputBase(audiodevice, laudio_bits,
    32                               laudio_channels, laudio_samplerate, source, set_initial_vol)
     33                              laudio_channels, laudio_samplerate, source, set_initial_vol,
     34                              laudio_passthru)
    3335{
    3436    // our initalisation
    3537    audiofd = -1;
     
    3739    numbadioctls = 0;
    3840
    3941    // Set everything up
    40     Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
     42    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
    4143}
    4244
    4345AudioOutputOSS::~AudioOutputOSS()
  • libs/libmyth/audiooutputarts.cpp

     
    99
    1010AudioOutputARTS::AudioOutputARTS(QString audiodevice, int audio_bits,
    1111                                 int audio_channels, int audio_samplerate,
    12                                  AudioOutputSource source, bool set_initial_vol)
     12                                 AudioOutputSource source, bool set_initial_vol,
     13                                 bool audio_passthru)
    1314              : AudioOutputBase(audiodevice, audio_bits, audio_channels,
    14                                 audio_samplerate, source, set_initial_vol)
     15                                audio_samplerate, source, set_initial_vol,
     16                                audio_passthru)
    1517{
    1618    // our initalisation
    1719    pcm_handle = NULL;
    1820
    1921    // Set everything up
    20     Reconfigure(audio_bits, audio_channels, audio_samplerate);
     22    Reconfigure(audio_bits, audio_channels, audio_samplerate, audio_passthru);
    2123}
    2224
    2325AudioOutputARTS::~AudioOutputARTS()
  • libs/libmyth/audiooutputdx.cpp

     
    9797
    9898AudioOutputDX::AudioOutputDX(QString audiodevice, int audio_bits,
    9999                             int audio_channels, int audio_samplerate,
    100                              AudioOutputSource source, bool set_initial_vol)
     100                             AudioOutputSource source, bool set_initial_vol,
     101                             bool audio_passthru)
    101102{
    102103    this->audiodevice = audiodevice;
    103104   
     
    110111   
    111112    InitDirectSound();
    112113   
    113     Reconfigure(audio_bits, audio_channels, audio_samplerate);
     114    Reconfigure(audio_bits, audio_channels, audio_samplerate, audio_passthru);
    114115}
    115116
    116117void AudioOutputDX::SetBlocking(bool blocking)
     
    118119    // FIXME: kedl: not sure what else could be required here?
    119120}
    120121
    121 void AudioOutputDX::Reconfigure(int audio_bits,
    122                                   int audio_channels, int audio_samplerate)
     122void AudioOutputDX::Reconfigure(int audio_bits, int audio_channels,
     123                                int audio_samplerate, int audio_passthru)
    123124{
    124125    if (dsbuffer)
    125126        DestroyDSBuffer();
     
    132133    effdsp = audio_samplerate;
    133134    this->audio_bits = audio_bits;
    134135    this->audio_channels = audio_channels;
     136    this->audio_passthru = audio_passthru;
    135137}
    136138
    137139AudioOutputDX::~AudioOutputDX()
  • libs/libmyth/audiooutputnull.h

     
    2626public:
    2727    AudioOutputNULL(QString audiodevice, int laudio_bits,
    2828                   int laudio_channels, int laudio_samplerate,
    29                    AudioOutputSource source, bool set_initial_vol);
     29                   AudioOutputSource source, bool set_initial_vol,
     30                   bool laudio_passthru);
    3031    virtual ~AudioOutputNULL();
    3132
    3233    virtual void Reset(void);
  • libs/libmyth/audiooutput.h

     
    2020    // opens one of the concrete subclasses
    2121    static AudioOutput *OpenAudio(QString audiodevice, int audio_bits,
    2222                                 int audio_channels, int audio_samplerate,
    23                                  AudioOutputSource source, bool set_initial_vol);
     23                                 AudioOutputSource source, bool set_initial_vol,
     24                                 bool audio_passthru);
    2425
    2526    AudioOutput() : VolumeBase(), OutputListeners() { lastError = QString::null; };
    2627    virtual ~AudioOutput() { };
    2728
    2829    // reconfigure sound out for new params
    29     virtual void Reconfigure(int audio_bits,
    30                              int audio_channels, int audio_samplerate) = 0;
     30    virtual void Reconfigure(int audio_bits, int audio_channels,
     31                             int audio_samplerate, bool audio_passthru) = 0;
    3132   
    3233    virtual void SetStretchFactor(float factor);
    3334
  • libs/libmyth/audiooutputnull.cpp

     
    1818
    1919AudioOutputNULL::AudioOutputNULL(QString audiodevice, int laudio_bits,
    2020                                 int laudio_channels, int laudio_samplerate,
    21                                  AudioOutputSource source, bool set_initial_vol)
     21                                 AudioOutputSource source, bool set_initial_vol,
     22                                 bool laudio_passthru)
    2223               : AudioOutputBase(audiodevice, laudio_bits, laudio_channels,
    23                                  laudio_samplerate, source, set_initial_vol)
     24                                 laudio_samplerate, source, set_initial_vol,
     25                                 laudio_passthru)
    2426{
    2527    locked_audio_channels = laudio_channels;
    2628    locked_audio_bits = laudio_bits;
    2729    locked_audio_samplerate = laudio_samplerate;
    28     Reconfigure(laudio_bits, laudio_channels, laudio_samplerate);
     30    Reconfigure(laudio_bits, laudio_channels, laudio_samplerate, laudio_passthru);
    2931    current_buffer_size = 0;
    3032}
    3133
  • libs/libmyth/audiooutputarts.h

     
    1616  public:
    1717     AudioOutputARTS(QString audiodevice, int audio_bits,
    1818                     int audio_channels, int audio_samplerate,
    19                      AudioOutputSource source, bool set_initial_vol);
     19                     AudioOutputSource source, bool set_initial_vol,
     20                     bool laudio_passthru);
    2021     virtual ~AudioOutputARTS();
    2122
    2223    // Volume control
  • libs/libmyth/audiooutputdx.h

     
    1616public:
    1717    AudioOutputDX(QString audiodevice, int audio_bits,
    1818                  int audio_channels, int audio_samplerate,
    19                   AudioOutputSource source, bool set_initial_vol);
     19                  AudioOutputSource source, bool set_initial_vol,
     20                  bool laudio_passthru);
    2021    virtual ~AudioOutputDX();
    2122
    2223    virtual void Reset(void);
  • libs/libmyth/audiooutputalsa.h

     
    1818  public:
    1919    AudioOutputALSA(QString audiodevice, int laudio_bits,
    2020                   int laudio_channels, int laudio_samplerate,
    21                    AudioOutputSource source, bool set_initial_vol);
     21                   AudioOutputSource source, bool set_initial_vol,
     22                   bool laudio_passthru);
    2223    virtual ~AudioOutputALSA();
    2324
    2425    // Volume control
  • programs/mythtranscode/transcode.cpp

     
    3434    AudioReencodeBuffer(int audio_bits, int audio_channels)
    3535    {
    3636        Reset();
    37         Reconfigure(audio_bits, audio_channels, 0);
     37        Reconfigure(audio_bits, audio_channels, 0, 0);
    3838        bufsize = 512000;
    3939        audiobuffer = new unsigned char[bufsize];
    4040    }
     
    4545    }
    4646
    4747    // reconfigure sound out for new params
    48     virtual void Reconfigure(int audio_bits,
    49                         int audio_channels, int audio_samplerate)
     48    virtual void Reconfigure(int audio_bits, int audio_channels,
     49                             int audio_samplerate, bool audio_passthru)
    5050    {
    5151        (void)audio_samplerate;
    5252        bits = audio_bits;