Ticket #5477: toggleupmixer.diff

File toggleupmixer.diff, 7.9 KB (added by Markus Schulz <msc@…>, 12 years ago)

patch v1

  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    37243730    audio_codec = ac;
    37253731}
    37263732
     3733bool NuppelVideoPlayer::ToggleUpmixer()
     3734{
     3735    if (audioOutput)
     3736    {
     3737        const AudioSettings settings(
     3738                audio_bits, audio_channels, audio_samplerate,
     3739                audio_passthru, audio_codec);
     3740        return audioOutput->ToggleUpmixer(settings);
     3741    }
     3742    return false;
     3743}
     3744
    37273745void NuppelVideoPlayer::SetEffDsp(int dsprate)
    37283746{
    37293747    if (audioOutput)
  • libs/libmythtv/tv_play.h

     
    239239    // Used by EPG
    240240    void ChangeVolume(bool up);
    241241    void ToggleMute(void);
     242    void ToggleUpmixer(void);
    242243
    243244  public slots:
    244245    void HandleOSDClosed(int osdType);
  • libs/libmythtv/NuppelVideoPlayer.h

     
    128128    void SetAudioParams(int bits, int channels, int samplerate, bool passthru);
    129129    void SetEffDsp(int dsprate);
    130130    void SetAudioCodec(void *ac);
     131    bool ToggleUpmixer();
    131132
    132133    // Sets
    133134    void SetParentWidget(QWidget *widget)     { parentWidget = widget; }
  • libs/libmythtv/tv_play.cpp

     
    379380    REG_KEY("TV Playback", "VOLUMEDOWN", "Volume down", "[,{,F10,Volume Down");
    380381    REG_KEY("TV Playback", "VOLUMEUP",   "Volume up",   "],},F11,Volume Up");
    381382    REG_KEY("TV Playback", "MUTE",       "Mute",        "|,\\,F9,Volume Mute");
     383    REG_KEY("TV Playback", "TOGGLEUPMIXER",       "Toggle Upmixer",        "F12,Toggle Upmixer");
    382384    REG_KEY("TV Playback", "TOGGLEPIPMODE", "Toggle Picture-in-Picture mode",
    383385            "V");
    384386    REG_KEY("TV Playback", "TOGGLEPIPWINDOW", "Toggle active PiP window", "B");
     
    27422744            else if (action == "VOLUMEDOWN" || action == "VOLUMEUP" ||
    27432745                     action == "STRETCHINC" || action == "STRETCHDEC" ||
    27442746                     action == "MUTE"       || action == "TOGGLEASPECT" ||
    2745                      action == "TOGGLEFILL" )
     2747                     action == "TOGGLEFILL" || action == "TOGGLEUPMIXER")
    27462748            {
    27472749                passThru = 1;
    27482750                handled = false;
     
    27972799            else if (action == "VOLUMEDOWN" || action == "VOLUMEUP" ||
    27982800                     action == "STRETCHINC" || action == "STRETCHDEC" ||
    27992801                     action == "MUTE" || action == "PAUSE" ||
    2800                      action == "CLEAROSD")
     2802                     action == "CLEAROSD" || action == "TOGGLEUPMIXER")
    28012803            {
    28022804                passThru = 1;
    28032805                handled = false;
     
    33643366            ChangeVolume(true);
    33653367        else if (action == "MUTE")
    33663368            ToggleMute();
     3369        else if (action == "TOGGLEUPMIXER")
     3370            ToggleUpmixer();
    33673371        else if (action == "STRETCHINC")
    33683372            ChangeTimeStretch(1);
    33693373        else if (action == "STRETCHDEC")
     
    61436149        GetOSD()->SetSettingsText(text, 5);
    61446150}
    61456151
     6152void TV::ToggleUpmixer(void)
     6153{
     6154    bool state=nvp->ToggleUpmixer();
     6155
     6156    QString text;
     6157
     6158    if(state)
     6159        text = tr("Upmixer enabled");
     6160    else
     6161        text = tr("Upmixer disabled");
     6162
     6163    if (GetOSD() && !browsemode)
     6164        GetOSD()->SetSettingsText(text, 5);
     6165}
     6166
    61466167void TV::ToggleSleepTimer(void)
    61476168{
    61486169    QString text;
  • libs/libmyth/audiooutputbase.h

     
    7676    /// Audio Buffer Size -- should be divisible by 12,10,8,6,4,2..
    7777    static const uint kAudioRingBufferSize   = 1536000;
    7878
     79    virtual bool ToggleUpmixer(const AudioSettings&);
    7980 protected:
    8081    // You need to implement the following functions
    8182    virtual bool OpenDevice(void) = 0;
     
    153154    int source_audio_channels;
    154155    int source_audio_bytes_per_sample;
    155156    bool needs_upmix;
     157    bool upmixer_enabled;
    156158    int surround_mode;
    157159
    158160    bool blocking; // do AddSamples calls block?
  • libs/libmyth/audiooutputbase.cpp

     
    5353    source_audio_channels(-1),
    5454    source_audio_bytes_per_sample(0),
    5555    needs_upmix(false),
     56    upmixer_enabled(false),
    5657    surround_mode(FreeSurround::SurroundModePassive),
    5758
    5859    blocking(false),
     
    223224    }
    224225
    225226    if ((configured_audio_channels == 6) &&
    226         !(settings.codec || audio_codec))
     227        !(settings.codec || audio_codec) && upmixer_enabled)
    227228    {
    228229        settings.channels = configured_audio_channels;
    229230        lneeds_upmix = true;
     
    245246        return;
    246247    }
    247248
    248     if (general_deps && !upmix_deps && lneeds_upmix && upmixer)
     249    if (general_deps && !upmix_deps && lneeds_upmix && upmixer && upmixer_enabled)
    249250    {
    250251        upmixer->flush();
    251252        source_audio_channels = lsource_audio_channels;
     
    654655                              audio_bytes_per_sample) / audio_stretchfactor);
    655656    }
    656657
    657     if (upmixer && needs_upmix)
     658    if (upmixer && needs_upmix && upmixer_enabled)
    658659    {
    659660        totalbuffer += upmixer->sampleLatency() * audio_bytes_per_sample;
    660661    }
     
    700701        len = (int)ceilf(float(len) * src_data.src_ratio);
    701702
    702703    // include samples in upmix buffer that may be flushed
    703     if (needs_upmix && upmixer)
     704    if (needs_upmix && upmixer && upmixer_enabled)
    704705        len += upmixer->numUnprocessedSamples() * abps;
    705706
    706707    if (pSoundStretch)
     
    767768        len = (int)ceilf(float(len) * src_data.src_ratio);
    768769
    769770    // include samples in upmix buffer that may be flushed
    770     if (needs_upmix && upmixer)
     771    if (needs_upmix && upmixer && upmixer_enabled)
    771772        len += upmixer->numUnprocessedSamples() * abps;
    772773
    773774    if (pSoundStretch)
     
    854855    return len;
    855856}
    856857
     858bool AudioOutputBase::ToggleUpmixer(const AudioSettings& settings)
     859{
     860    upmixer_enabled = !upmixer_enabled;
     861    this->Reconfigure(settings);
     862    return upmixer_enabled;
     863}
     864
    857865void AudioOutputBase::_AddSamples(void *buffer, bool interleaved, int samples,
    858866                                  long long timecode)
    859867{
     
    870878
    871879    VERBOSE(VB_AUDIO+VB_TIMESTAMP,
    872880            LOC + QString("_AddSamples samples=%1 bytes=%2, used=%3, "
    873                           "free=%4, timecode=%5 needsupmix %6")
     881                          "free=%4, timecode=%5 needsupmix %6 upmixer enabled %7")
    874882            .arg(samples)
    875883            .arg(samples * abps)
    876884            .arg(kAudioRingBufferSize-afree).arg(afree).arg(timecode)
    877             .arg(needs_upmix));
     885            .arg(needs_upmix).arg(upmixer_enabled));
    878886
    879     if (upmixer && needs_upmix)
     887    if (upmixer && needs_upmix && upmixer_enabled)
    880888    {
    881889        int out_samples = 0;
    882890        int step = (interleaved)?source_audio_channels:1;
  • libs/libmyth/audiooutput.h

     
    6969    virtual void bufferOutputData(bool y) = 0;
    7070    virtual int readOutputData(unsigned char *read_buffer, int max_length) = 0;
    7171
     72    virtual bool ToggleUpmixer(const AudioSettings&) = 0;
     73
    7274  protected:
    7375    void Error(const QString &msg);
    7476    void Warn(const QString &msg);