Ticket #8856: StartRecording-WaitForTune-v2.patch

File StartRecording-WaitForTune-v2.patch, 3.0 KB (added by jpoet, 14 years ago)

Works with LiveTV

  • libs/libmythtv/tv_rec.cpp

     
    122122      stateChangeLock(QMutex::Recursive),
    123123      pendingRecLock(QMutex::Recursive),
    124124      internalState(kState_None), desiredNextState(kState_None),
    125       changeState(false), pauseNotify(true),
     125      changeState(false), m_SMdone(true), pauseNotify(true),
    126126      stateFlags(0), lastTuningRequest(0),
    127127      triggerEventLoopLock(QMutex::NonRecursive),
    128128      triggerEventLoopSignal(false),
     
    16181618        stateChangeLock.lock();
    16191619
    16201620        // verify that we were triggered.
    1621         ok = (tuningRequests.empty() && !changeState);
     1621        ok = (tuningRequests.empty() && m_SMdone && !changeState);
    16221622    }
    16231623    return ok;
    16241624}
     
    35073507
    35083508        // The dequeue isn't safe to do until now because we
    35093509        // release the stateChangeLock to teardown a recorder
     3510        if (request.flags & kFlagRecording)
     3511            m_SMdone = false;
    35103512        tuningRequests.dequeue();
    35113513
    35123514        // Now we start new stuff
     
    35423544    if (HasFlags(kFlagWaitingForSignal) && !(streamData = TuningSignalCheck()))
    35433545        return;
    35443546
     3547    m_SMdone = true;
     3548
    35453549    if (HasFlags(kFlagNeedToStartRecorder))
    35463550    {
    35473551        if (recorder)
     
    37883792    if (!channum.isEmpty())
    37893793    {
    37903794        if (!input.isEmpty())
    3791             ok = channel->SelectInput(input, channum, true);
     3795            channel->SelectInput(input, channum, true);
    37923796        else
    3793         {
    37943797            channel->SelectChannel(channum, true);
    3795             ok = true;
    3796         }
    37973798    }
    37983799
    3799     if (!ok)
    3800     {
    3801         if (!(request.flags & kFlagLiveTV) || !(request.flags & kFlagEITScan))
    3802         {
    3803             if (curRecording)
    3804                 curRecording->SetRecordingStatus(rsFailed);
    3805 
    3806             VERBOSE(VB_IMPORTANT, LOC_ERR +
    3807                     QString("Failed to set channel to %1. "
    3808                             "Reverting to kState_None")
    3809                     .arg(channum));
    3810             if (kState_None != internalState)
    3811                 ChangeState(kState_None);
    3812             else
    3813                 tuningRequests.enqueue(TuningRequest(kFlagKillRec));
    3814             return;
    3815         }
    3816         else
    3817         {
    3818             VERBOSE(VB_IMPORTANT, LOC_ERR +
    3819                     QString("Failed to set channel to %1.").arg(channum));
    3820         }
    3821     }
    3822 
    38233800    // Start signal (or channel change) monitoring
    38243801    VERBOSE(VB_RECORD, LOC + "Starting Signal Monitor");
    38253802    bool error = false;
  • libs/libmythtv/tv_rec.h

     
    355355    TVState        internalState;
    356356    TVState        desiredNextState;
    357357    bool           changeState;
     358    bool           m_SMdone;
    358359    bool           pauseNotify;
    359360    uint           stateFlags;
    360361    TuningQueue    tuningRequests;