Ticket #1827: dvd_seeking_improv.diff

File dvd_seeking_improv.diff, 4.1 KB (added by skamithi, 19 years ago)
  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    12841283        videobuf_retries = 0;
    12851284    }
    12861285
     1286    if (framesPlayed < 5 && play_speed > 1)
     1287        next_play_speed = 1;
     1288
    12871289    // Decode the correct frame
    12881290    if (!GetDecoder())
    12891291        VERBOSE(VB_IMPORTANT, LOC + "GetFrame() called with NULL decoder.");
     
    31733175            normal_speed = next_normal_speed;
    31743176            VERBOSE(VB_PLAYBACK, LOC + "Changing speed to " << play_speed);
    31753177
     3178            if (ringBuffer->isDVD())
     3179                GetDecoder()->UpdateDVDFramesPlayed();
     3180
    31763181            if (play_speed == 0.0)
    31773182            {
    31783183                DoPause();
     
    32923297            {
    32933298                PauseVideo();
    32943299
    3295                 if (fftime >= 5)
     3300                if (fftime >= 5 && !ringBuffer->isDVD())
    32963301                    DoFastForward();
    32973302
    32983303                if (eof)
     
    36923697#endif
    36933698
    36943699        GetDecoder()->setExactSeeks(exactseeks && ffrew_skip == 1);
    3695         GetDecoder()->DoRewind(framesPlayed);
     3700        if (!ringBuffer->isDVD())
     3701            GetDecoder()->DoRewind(framesPlayed);
    36963702        ClearAfterSeek();
    36973703    }
    36983704
  • libs/libmythtv/avformatdecoder.cpp

     
    547547    {
    548548        posmapStarted = false;
    549549        SyncPositionMap();
    550         framesPlayed = DVDCurrentFrameNumber();
    551         framesRead = framesPlayed;
    552550    }
    553551
    554552#if 0
     
    24902488                    ScanStreams(true);
    24912489                    lastdvdtitle = dvdtitle;
    24922490                }
    2493                 framesPlayed = DVDCurrentFrameNumber();
    2494                 framesRead = framesPlayed;
     2491                UpdateDVDFramesPlayed();
    24952492                VERBOSE(VB_PLAYBACK, QString(LOC + "DVD Cell Changed. "
    24962493                                             "Update framesPlayed: %1 ")
    24972494                                             .arg(framesPlayed));
  • libs/libmythtv/decoderbase.h

     
    107107    void ChangeDVDTrack(bool ffw);
    108108    long long DVDFindPosition(long long desiredFrame);
    109109    long long DVDCurrentFrameNumber(void);
     110    void UpdateDVDFramesPlayed(void);
    110111
    111112    // Audio/Subtitle/EIA-608/EIA-708 stream selection
    112113    virtual QStringList GetTracks(uint type) const;
  • libs/libmythtv/decoderbase.cpp

     
    712714
    713715        if (elapsed == 0)
    714716            SeekReset(framesPlayed, 0, true, true);
    715 
    716         // update frames played
    717         long long played = DVDCurrentFrameNumber();
    718 
    719         framesPlayed = played;
    720         GetNVP()->getVideoOutput()->SetFramesPlayed(played + 1);
    721         GetNVP()->SetFramesPlayed(played + 1);
     717   
     718        UpdateDVDFramesPlayed();
    722719    }
    723720}
    724721
     
    734731
    735732long long DecoderBase::DVDCurrentFrameNumber(void)
    736733{
    737     if (!ringBuffer->isDVD())
     734    int size = m_positionMap.size() - 1;
     735    if (!ringBuffer->isDVD() || size < 0)
    738736        return 0;
    739737
    740     int size = m_positionMap.size() - 1;
    741738    long long currentpos = ringBuffer->GetReadPosition();
    742739    long long multiplier = (currentpos * m_positionMap[size].index);
    743740    long long currentframe = multiplier / m_positionMap[size].pos;
    744741    return currentframe;
    745742}
    746743
     744void DecoderBase::UpdateDVDFramesPlayed(void)
     745{
     746    long long currentpos = DVDCurrentFrameNumber();
     747    if (currentpos != 0)
     748    {
     749        framesPlayed = framesRead = currentpos ;
     750        GetNVP()->getVideoOutput()->SetFramesPlayed(currentpos + 1);
     751        GetNVP()->SetFramesPlayed(currentpos + 1);
     752    }
     753}
     754
    747755QStringList DecoderBase::GetTracks(uint type) const
    748756{
    749757    QStringList list;