Ticket #10377: 10377-v1.patch

File 10377-v1.patch, 5.4 KB (added by danielk, 14 years ago)
  • mythtv/libs/libmythtv/tv_play.cpp

    diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
    index 91ef914..dd2f1f8 100644
    a b void TV::ChangeChannel(PlayerContext *ctx, int direction)  
    69966996        UpdateOSDInput(ctx);
    69976997}
    69986998
     6999static uint get_chanid(const PlayerContext *ctx,
     7000                       uint cardid, const QString &channum)
     7001{
     7002    uint chanid = 0, cur_sourceid = 0;
     7003    // try to find channel on current input
     7004    if (ctx && ctx->playingInfo && ctx->playingInfo->GetSourceID())
     7005    {
     7006        cur_sourceid = ctx->playingInfo->GetSourceID();
     7007        chanid = max(ChannelUtil::GetChanID(cur_sourceid, channum), 0);
     7008        if (chanid)
     7009            return chanid;
     7010    }
     7011    // try to find channel on all inputs
     7012    vector<uint> inputs = CardUtil::GetInputIDs(cardid);
     7013    for (vector<uint>::const_iterator it = inputs.begin();
     7014         it != inputs.end(); ++it)
     7015    {
     7016        uint sourceid = CardUtil::GetSourceID(*it);
     7017        if (cur_sourceid == sourceid)
     7018            continue; // already tested above
     7019        if (sourceid)
     7020        {
     7021            chanid = max(ChannelUtil::GetChanID(sourceid, channum), 0);
     7022            if (chanid)
     7023                return chanid;
     7024        }
     7025    }
     7026    return chanid;
     7027}
     7028
    69997029void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const QString &chan)
    70007030{
    70017031    LOG(VB_PLAYBACK, LOG_INFO, LOC + QString("ChangeChannel(%1, '%2') ")
    void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const QString &chan)  
    70067036
    70077037    QString channum = chan;
    70087038    QStringList reclist;
     7039    QSet<uint> tunable_on;
    70097040
    70107041    QString oldinputname = ctx->recorder->GetInput();
    70117042
    void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const QString &chan)  
    70367067            ctx->recorder->CheckChannelPrefix(chan,  pref_cardid,
    70377068                                              dummy, needed_spacer);
    70387069
     7070            LOG(VB_CHANNEL, LOG_INFO, LOC +
     7071                QString("CheckChannelPrefix(%1, pref_cardid %2, %3, %4) "
     7072                        "cardid %5")
     7073                .arg(chan).arg(pref_cardid).arg(dummy).arg(needed_spacer)
     7074                .arg(cardid));
     7075
    70397076            channum = add_spacer(chan, needed_spacer);
    7040             getit = (pref_cardid != cardid);
     7077            if (pref_cardid != cardid)
     7078            {
     7079                getit = true;
     7080            }
     7081            else
     7082            {
     7083                if (!chanid)
     7084                    chanid = get_chanid(ctx, cardid, chan);
     7085                tunable_on = IsTunableOn(ctx, chanid, true);
     7086                getit = !tunable_on.contains(cardid);
     7087            }
    70417088        }
    70427089
    70437090        if (getit)
    7044             reclist = ChannelUtil::GetValidRecorderList(chanid, channum);
     7091        {
     7092            QStringList tmp =
     7093                ChannelUtil::GetValidRecorderList(chanid, channum);
     7094            if (tunable_on.empty())
     7095            {
     7096                if (!chanid)
     7097                    chanid = get_chanid(ctx, ctx->GetCardID(), chan);
     7098                tunable_on = IsTunableOn(ctx, chanid, true);
     7099            }
     7100            QStringList::const_iterator it = tmp.begin();
     7101            for (; it != tmp.end(); ++it)
     7102            {
     7103                if (!chanid || tunable_on.contains((*it).toUInt()))
     7104                    reclist.push_back(*it);
     7105            }
     7106        }
    70457107    }
    70467108
    70477109    if (reclist.size())
    void TV::ShowLCDDVDInfo(const PlayerContext *ctx)  
    77187780
    77197781bool TV::IsTunable(const PlayerContext *ctx, uint chanid, bool use_cache)
    77207782{
    7721     LOG(VB_PLAYBACK, LOG_INFO, QString("IsTunable(%1)").arg(chanid));
     7783    return !IsTunableOn(ctx,chanid,use_cache).empty();
     7784}
     7785
     7786QSet<uint> TV::IsTunableOn(
     7787    const PlayerContext *ctx, uint chanid, bool use_cache)
     7788{
     7789    LOG(VB_CHANNEL, LOG_INFO, QString("IsTunableOn(%1)").arg(chanid));
     7790    QSet<uint> tunable_cards;
    77227791
    77237792    if (!chanid)
    7724         return false;
     7793        return tunable_cards;
    77257794
    77267795    uint mplexid = ChannelUtil::GetMplexID(chanid);
    77277796    mplexid = (32767 == mplexid) ? 0 : mplexid;
    bool TV::IsTunable(const PlayerContext *ctx, uint chanid, bool use_cache)  
    77977866                inputs[j].mplexid != mplexid)
    77987867                continue;
    77997868
    7800             LOG(VB_PLAYBACK, LOG_INFO, QString("IsTunable(%1) -> true\n")
    7801                     .arg(chanid));
     7869            LOG(VB_CHANNEL, LOG_INFO, QString("IsTunableOn(%1) added %2\n")
     7870                .arg(chanid).arg(cardids[i]));
    78027871
    7803             return true;
     7872            tunable_cards.insert(cardids[i]);
     7873
     7874            break;
    78047875        }
    78057876    }
    78067877
    7807     LOG(VB_PLAYBACK, LOG_INFO, QString("IsTunable(%1) -> false\n").arg(chanid));
    7808 
    7809     return false;
     7878    return tunable_cards;
    78107879}
    78117880
    78127881void TV::ClearTunableCache(void)
  • mythtv/libs/libmythtv/tv_play.h

    diff --git a/mythtv/libs/libmythtv/tv_play.h b/mythtv/libs/libmythtv/tv_play.h
    index adce496..33ecd1e 100644
    a b using namespace std;  
    2424#include <QHash>
    2525#include <QTime>
    2626#include <QMap>
     27#include <QSet>
    2728
    2829// MythTV
    2930#include "mythdeque.h"
    class MTV_PUBLIC TV : public QObject  
    261262    bool StartEmbedding(const QRect&);
    262263    void StopEmbedding(void);
    263264    bool IsTunable(const PlayerContext*, uint chanid, bool use_cache = false);
     265    QSet<uint> IsTunableOn(const PlayerContext*, uint chanid, bool use_cache);
    264266    void ClearTunableCache(void);
    265267    void ChangeChannel(const PlayerContext*, const DBChanList &options);
    266268    void DrawUnusedRects(void);