Ticket #8387: libmythtv.patch

File libmythtv.patch, 4.2 KB (added by jafa@…, 14 years ago)

Add vchannel support and tune mode check

  • hdhrstreamhandler.cpp

     
    483483
    484484bool HDHRStreamHandler::UpdateFilters(void)
    485485{
     486    if (_tune_mode == hdhrTuneModeFrequency)
     487        _tune_mode = hdhrTuneModeFrequencyPid;
     488
     489    if (_tune_mode != hdhrTuneModeFrequencyPid)
     490    {
     491        VERBOSE(VB_IMPORTANT, LOC_ERR + "UpdateFilters called in wrong tune mode");
     492        return false;
     493    }
     494
    486495#ifdef DEBUG_PID_FILTERS
    487496    VERBOSE(VB_RECORD, LOC + "UpdateFilters()");
    488497#endif // DEBUG_PID_FILTERS
     
    493502    vector<uint> range_min;
    494503    vector<uint> range_max;
    495504
    496 // FIXME
    497 //    if (_ignore_filters)
    498  //       return true;
    499 
    500505    for (uint i = 0; i < _pid_info.size(); i++)
    501506    {
    502507        uint pid_min = _pid_info[i];
     
    731736
    732737bool HDHRStreamHandler::TuneChannel(const QString &chn)
    733738{
     739    _tune_mode = hdhrTuneModeFrequency;
     740
    734741    QString current = TunerGet("channel");
    735 
    736742    if (current == chn)
    737743    {
    738744        VERBOSE(VB_RECORD, QString(LOC + "Not Re-Tuning channel %1").arg(chn));
     
    746752
    747753bool HDHRStreamHandler::TuneProgram(uint mpeg_prog_num)
    748754{
     755    if (_tune_mode == hdhrTuneModeFrequency)
     756        _tune_mode = hdhrTuneModeFrequencyProgram;
     757
     758    if (_tune_mode != hdhrTuneModeFrequencyProgram)
     759    {
     760        VERBOSE(VB_IMPORTANT, LOC_ERR + "TuneProgram called in wrong tune mode");
     761        return false;
     762    }
     763
    749764    VERBOSE(VB_RECORD, QString(LOC + "Tuning program %1").arg(mpeg_prog_num));
    750765    return !TunerSet(
    751766        "program", QString::number(mpeg_prog_num), false).isEmpty();
    752767}
     768
     769bool HDHRStreamHandler::TuneVChannel(const QString &vchn)
     770{
     771    _tune_mode = hdhrTuneModeVChannel;
     772
     773    VERBOSE(VB_RECORD, QString(LOC + "Tuning vchannel %1").arg(vchn));
     774    return !TunerSet(
     775        "vchannel", vchn).isEmpty();
     776}
  • hdhrchannel.cpp

     
    173173    bool isFrequency = ok && (frequency > 10000000);
    174174
    175175    // Tune to proper frequency
     176    bool TunedByVChannel = false;
    176177    if ((*it)->externalChanger.isEmpty())
    177178    {
    178179        if (isFrequency)
     
    182183        }
    183184        else
    184185        {
    185             VERBOSE(VB_IMPORTANT, LOC_ERR +
    186                     "dtv_multiplex data is required for tuning");
     186            if (!_stream_handler->TuneVChannel(channum))
     187            {
     188                VERBOSE(VB_IMPORTANT, LOC_ERR +
     189                        "dtv_multiplex data is required for tuning");
     190                return false;
     191            }
    187192
    188             return false;
     193            SetSIStandard(si_std);
     194            TunedByVChannel = true;
    189195        }
    190196    }
    191197    else if (!ChangeExternalChannel(freqid))
     
    203209    m_inputs[m_currentInputID]->startChanNum = tmpX;
    204210
    205211    // Turn on the program filtering if tuning to MPEG stream
    206     if (mpeg_prog_num && (GetTuningMode() == "mpeg"))
     212    if (mpeg_prog_num && !TunedByVChannel && (GetTuningMode() == "mpeg"))
    207213        _stream_handler->TuneProgram(mpeg_prog_num);
    208214
    209215    return true;
  • hdhrstreamhandler.h

     
    2727struct hdhomerun_device_t { int dummy; };
    2828#endif
    2929
     30enum HDHRTuneMode {
     31    hdhrTuneModeNone = 0,
     32    hdhrTuneModeFrequency,
     33    hdhrTuneModeFrequencyPid,
     34    hdhrTuneModeFrequencyProgram,
     35    hdhrTuneModeVChannel
     36};
     37
    3038typedef QMap<uint,int> FilterMap;
    3139
    3240//#define RETUNE_TIMEOUT 5000
     
    5058    // Commands
    5159    bool TuneChannel(const QString &chanid);
    5260    bool TuneProgram(uint mpeg_prog_num);
     61    bool TuneVChannel(const QString &vchn);
    5362    bool EnterPowerSavingMode(void);
    5463
    5564
     
    91100
    92101  private:
    93102    hdhomerun_device_t *_hdhomerun_device;
    94     uint                _tuner;
    95     QString             _devicename;
     103    uint                 _tuner;
     104    QString              _devicename;
    96105    vector<DTVTunerType> _tuner_types;
     106    HDHRTuneMode         _tune_mode; // debug self check
    97107
    98108    mutable QMutex    _start_stop_lock;
    99109    bool              _running;