Ticket #1827: dvd_seeking_improv.diff
File dvd_seeking_improv.diff, 4.1 KB (added by , 19 years ago) |
---|
-
libs/libmythtv/NuppelVideoPlayer.cpp
1284 1283 videobuf_retries = 0; 1285 1284 } 1286 1285 1286 if (framesPlayed < 5 && play_speed > 1) 1287 next_play_speed = 1; 1288 1287 1289 // Decode the correct frame 1288 1290 if (!GetDecoder()) 1289 1291 VERBOSE(VB_IMPORTANT, LOC + "GetFrame() called with NULL decoder."); … … 3173 3175 normal_speed = next_normal_speed; 3174 3176 VERBOSE(VB_PLAYBACK, LOC + "Changing speed to " << play_speed); 3175 3177 3178 if (ringBuffer->isDVD()) 3179 GetDecoder()->UpdateDVDFramesPlayed(); 3180 3176 3181 if (play_speed == 0.0) 3177 3182 { 3178 3183 DoPause(); … … 3292 3297 { 3293 3298 PauseVideo(); 3294 3299 3295 if (fftime >= 5 )3300 if (fftime >= 5 && !ringBuffer->isDVD()) 3296 3301 DoFastForward(); 3297 3302 3298 3303 if (eof) … … 3692 3697 #endif 3693 3698 3694 3699 GetDecoder()->setExactSeeks(exactseeks && ffrew_skip == 1); 3695 GetDecoder()->DoRewind(framesPlayed); 3700 if (!ringBuffer->isDVD()) 3701 GetDecoder()->DoRewind(framesPlayed); 3696 3702 ClearAfterSeek(); 3697 3703 } 3698 3704 -
libs/libmythtv/avformatdecoder.cpp
547 547 { 548 548 posmapStarted = false; 549 549 SyncPositionMap(); 550 framesPlayed = DVDCurrentFrameNumber();551 framesRead = framesPlayed;552 550 } 553 551 554 552 #if 0 … … 2490 2488 ScanStreams(true); 2491 2489 lastdvdtitle = dvdtitle; 2492 2490 } 2493 framesPlayed = DVDCurrentFrameNumber(); 2494 framesRead = framesPlayed; 2491 UpdateDVDFramesPlayed(); 2495 2492 VERBOSE(VB_PLAYBACK, QString(LOC + "DVD Cell Changed. " 2496 2493 "Update framesPlayed: %1 ") 2497 2494 .arg(framesPlayed)); -
libs/libmythtv/decoderbase.h
107 107 void ChangeDVDTrack(bool ffw); 108 108 long long DVDFindPosition(long long desiredFrame); 109 109 long long DVDCurrentFrameNumber(void); 110 void UpdateDVDFramesPlayed(void); 110 111 111 112 // Audio/Subtitle/EIA-608/EIA-708 stream selection 112 113 virtual QStringList GetTracks(uint type) const; -
libs/libmythtv/decoderbase.cpp
712 714 713 715 if (elapsed == 0) 714 716 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(); 722 719 } 723 720 } 724 721 … … 734 731 735 732 long long DecoderBase::DVDCurrentFrameNumber(void) 736 733 { 737 if (!ringBuffer->isDVD()) 734 int size = m_positionMap.size() - 1; 735 if (!ringBuffer->isDVD() || size < 0) 738 736 return 0; 739 737 740 int size = m_positionMap.size() - 1;741 738 long long currentpos = ringBuffer->GetReadPosition(); 742 739 long long multiplier = (currentpos * m_positionMap[size].index); 743 740 long long currentframe = multiplier / m_positionMap[size].pos; 744 741 return currentframe; 745 742 } 746 743 744 void 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 747 755 QStringList DecoderBase::GetTracks(uint type) const 748 756 { 749 757 QStringList list;