Ticket #5477: toggleupmixer_v2.diff

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

much more simplified and working version (original has channels swapped without upmixer). now using FreeSurround? for "no-upmixer" too with different settings.

  • 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

     
    380381    REG_KEY("TV Playback", "VOLUMEDOWN", "Volume down", "[,{,F10,Volume Down");
    381382    REG_KEY("TV Playback", "VOLUMEUP",   "Volume up",   "],},F11,Volume Up");
    382383    REG_KEY("TV Playback", "MUTE",       "Mute",        "|,\\,F9,Volume Mute");
     384    REG_KEY("TV Playback", "TOGGLEUPMIXER",       "Toggle Upmixer",        "F12,Toggle Upmixer");
    383385    REG_KEY("TV Playback", "TOGGLEPIPMODE", "Toggle Picture-in-Picture mode",
    384386            "V");
    385387    REG_KEY("TV Playback", "TOGGLEPIPWINDOW", "Toggle active PiP window", "B");
     
    27432745            else if (action == "VOLUMEDOWN" || action == "VOLUMEUP" ||
    27442746                     action == "STRETCHINC" || action == "STRETCHDEC" ||
    27452747                     action == "MUTE"       || action == "TOGGLEASPECT" ||
    2746                      action == "TOGGLEFILL" )
     2748                     action == "TOGGLEFILL" || action == "TOGGLEUPMIXER")
    27472749            {
    27482750                passThru = 1;
    27492751                handled = false;
     
    27982800            else if (action == "VOLUMEDOWN" || action == "VOLUMEUP" ||
    27992801                     action == "STRETCHINC" || action == "STRETCHDEC" ||
    28002802                     action == "MUTE" || action == "PAUSE" ||
    2801                      action == "CLEAROSD")
     2803                     action == "CLEAROSD" || action == "TOGGLEUPMIXER")
    28022804            {
    28032805                passThru = 1;
    28042806                handled = false;
     
    33653367            ChangeVolume(true);
    33663368        else if (action == "MUTE")
    33673369            ToggleMute();
     3370        else if (action == "TOGGLEUPMIXER")
     3371            ToggleUpmixer();
    33683372        else if (action == "STRETCHINC")
    33693373            ChangeTimeStretch(1);
    33703374        else if (action == "STRETCHDEC")
     
    61446150        GetOSD()->SetSettingsText(text, 5);
    61456151}
    61466152
     6153void TV::ToggleUpmixer(void)
     6154{
     6155    bool state=nvp->ToggleUpmixer();
     6156
     6157    QString text;
     6158
     6159    if(state)
     6160        text = tr("Upmixer enabled");
     6161    else
     6162        text = tr("Upmixer disabled");
     6163
     6164    if (GetOSD() && !browsemode)
     6165        GetOSD()->SetSettingsText(text, 5);
     6166}
     6167
    61476168void TV::ToggleSleepTimer(void)
    61486169{
    61496170    QString text;
     
    73187339
    73197340    if (HandleTrackAction(action))
    73207341        ;
     7342    else if (action == "TOGGLEUPMIXER")
     7343        ToggleUpmixer();
    73217344    else if (action == "TOGGLEMANUALZOOM")
    73227345        SetManualZoom(true);
    73237346    else if (action == "TOGGLESTRETCH")
     
    75587586                QString("TOGGLEPICCONTROLS%1").arg(i));
    75597587        }
    75607588    }
     7589    new OSDGenericTree(treeMenu, tr("Toggle Upmixer"), "TOGGLEUPMIXER");
    75617590
    75627591    new OSDGenericTree(treeMenu, tr("Manual Zoom Mode"), "TOGGLEMANUALZOOM");
    75637592
  • libs/libmyth/audiooutputbase.h

     
    7777    /// Audio Buffer Size -- should be divisible by 12,10,8,6,4,2..
    7878    static const uint kAudioRingBufferSize   = 1536000;
    7979
     80    virtual bool ToggleUpmixer(const AudioSettings&);
    8081 protected:
    8182    // You need to implement the following functions
    8283    virtual bool OpenDevice(void) = 0;
     
    157158    int source_audio_channels;
    158159    int source_audio_bytes_per_sample;
    159160    bool needs_upmix;
     161    bool upmixer_enabled;
    160162    int surround_mode;
    161163
    162164    bool blocking; // do AddSamples calls block?
  • libs/libmyth/audiooutputbase.cpp

     
    5050    source_audio_channels(-1),
    5151    source_audio_bytes_per_sample(0),
    5252    needs_upmix(false),
     53    upmixer_enabled(false),
    5354    surround_mode(FreeSurround::SurroundModePassive),
    5455
    5556    blocking(false),
     
    194195    int lsource_audio_channels = settings.channels;
    195196    bool lneeds_upmix = false;
    196197
     198    if (!upmixer_enabled)
     199        configured_audio_channels = settings.channels;
     200    else
     201        configured_audio_channels = gContext->GetNumSetting("MaxChannels", 2);
     202
    197203    if (settings.codec)
    198204    {
    199205        lcodec_id = ((AVCodecContext*)settings.codec)->codec_id;
     
    818824    return len;
    819825}
    820826
     827bool AudioOutputBase::ToggleUpmixer(const AudioSettings& settings)
     828{
     829    upmixer_enabled = !upmixer_enabled;
     830    this->Reconfigure(settings);
     831    return upmixer_enabled;
     832}
     833
    821834void AudioOutputBase::_AddSamples(void *buffer, bool interleaved, int samples,
    822835                                  long long timecode)
    823836{
     
    834847
    835848    VERBOSE(VB_AUDIO+VB_TIMESTAMP,
    836849            LOC + QString("_AddSamples samples=%1 bytes=%2, used=%3, "
    837                           "free=%4, timecode=%5 needsupmix %6")
     850                          "free=%4, timecode=%5 needsupmix %6 upmixer enabled %7")
    838851            .arg(samples)
    839852            .arg(samples * abps)
    840853            .arg(kAudioRingBufferSize-afree).arg(afree).arg(timecode)
    841             .arg(needs_upmix));
     854            .arg(needs_upmix).arg(upmixer_enabled));
    842855
    843856    if (upmixer && needs_upmix)
    844857    {
  • 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);
  • programs/mythtranscode/transcode.cpp

     
    166166        // Do nothing
    167167        return;
    168168    }
     169    virtual bool ToggleUpmixer(const AudioSettings&)
     170    {
     171        return false;
     172    };
    169173
    170174    virtual int GetAudiotime(void)
    171175    {