mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Improved sending all frames to devices that can handle them in fast forward trick speeds, including subtitles
This commit is contained in:
		
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							@@ -5465,7 +5465,7 @@ Video Disk Recorder Revision History
 | 
			
		||||
- Fixed a new[]/delete mismatch in cMenuEditStrItem::LeaveEditMode() (thanks to
 | 
			
		||||
  Udo Richter).
 | 
			
		||||
- Implemented sending all frames to devices that can handle them in fast forward
 | 
			
		||||
  trick speeds (thansk to Timo Eskola).
 | 
			
		||||
  trick speeds (thanks to Timo Eskola).
 | 
			
		||||
- Updated the Hungarian language texts (thanks to Thomas G<>nther).
 | 
			
		||||
- Fixed description of DeviceSetAvailableTrack() and cReceiver(), and added an
 | 
			
		||||
  example ~cMyReceiver() in PLUGINS.html (thanks to Marco Schl<68><6C>ler).
 | 
			
		||||
@@ -5597,3 +5597,5 @@ Video Disk Recorder Revision History
 | 
			
		||||
- Ignoring "repeat" and "release" keys in the time search entry mode during replay,
 | 
			
		||||
  to avoid inadvertently leaving it in case a key is pressed too long (suggested
 | 
			
		||||
  by Andreas Brugger).
 | 
			
		||||
- Improved sending all frames to devices that can handle them in fast forward
 | 
			
		||||
  trick speeds, including subtitles (thanks to Timo Eskola).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								device.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								device.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: device.c 1.150 2008/02/08 13:48:31 kls Exp $
 | 
			
		||||
 * $Id: device.c 1.151 2008/02/09 15:09:04 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "device.h"
 | 
			
		||||
@@ -1231,7 +1231,7 @@ int cDevice::PlayPesPacket(const uchar *Data, int Length, bool VideoOnly)
 | 
			
		||||
               break;
 | 
			
		||||
          case 0xC0 ... 0xDF: // audio
 | 
			
		||||
               SetAvailableTrack(ttAudio, c - 0xC0, c);
 | 
			
		||||
               if (!VideoOnly && c == availableTracks[currentAudioTrack].id) {
 | 
			
		||||
               if ((!VideoOnly || HasIBPTrickSpeed()) && c == availableTracks[currentAudioTrack].id) {
 | 
			
		||||
                  w = PlayAudio(Start, d, c);
 | 
			
		||||
                  if (FirstLoop)
 | 
			
		||||
                     Audios.PlayAudio(Data, Length, c);
 | 
			
		||||
@@ -1261,13 +1261,13 @@ pre_1_3_19_PrivateStreamDeteced:
 | 
			
		||||
                 case 0x20: // SPU
 | 
			
		||||
                 case 0x30: // SPU
 | 
			
		||||
                      SetAvailableTrack(ttSubtitle, SubStreamIndex, SubStreamId);
 | 
			
		||||
                      if (!VideoOnly && currentSubtitleTrack != ttNone && SubStreamId == availableTracks[currentSubtitleTrack].id)
 | 
			
		||||
                      if ((!VideoOnly || HasIBPTrickSpeed()) && currentSubtitleTrack != ttNone && SubStreamId == availableTracks[currentSubtitleTrack].id)
 | 
			
		||||
                         w = PlaySubtitle(Start, d);
 | 
			
		||||
                      break;
 | 
			
		||||
                 case 0x80: // AC3 & DTS
 | 
			
		||||
                      if (Setup.UseDolbyDigital) {
 | 
			
		||||
                         SetAvailableTrack(ttDolby, SubStreamIndex, SubStreamId);
 | 
			
		||||
                         if (!VideoOnly && SubStreamId == availableTracks[currentAudioTrack].id) {
 | 
			
		||||
                         if ((!VideoOnly || HasIBPTrickSpeed()) && SubStreamId == availableTracks[currentAudioTrack].id) {
 | 
			
		||||
                            w = PlayAudio(Start, d, SubStreamId);
 | 
			
		||||
                            if (FirstLoop)
 | 
			
		||||
                               Audios.PlayAudio(Data, Length, SubStreamId);
 | 
			
		||||
@@ -1276,7 +1276,7 @@ pre_1_3_19_PrivateStreamDeteced:
 | 
			
		||||
                      break;
 | 
			
		||||
                 case 0xA0: // LPCM
 | 
			
		||||
                      SetAvailableTrack(ttAudio, SubStreamIndex, SubStreamId);
 | 
			
		||||
                      if (!VideoOnly && SubStreamId == availableTracks[currentAudioTrack].id) {
 | 
			
		||||
                      if ((!VideoOnly || HasIBPTrickSpeed()) && SubStreamId == availableTracks[currentAudioTrack].id) {
 | 
			
		||||
                         w = PlayAudio(Start, d, SubStreamId);
 | 
			
		||||
                         if (FirstLoop)
 | 
			
		||||
                            Audios.PlayAudio(Data, Length, SubStreamId);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								dvbplayer.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								dvbplayer.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: dvbplayer.c 1.47 2007/10/13 12:20:58 kls Exp $
 | 
			
		||||
 * $Id: dvbplayer.c 1.48 2008/02/09 15:10:54 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "dvbplayer.h"
 | 
			
		||||
@@ -537,8 +537,10 @@ void cDvbPlayer::Pause(void)
 | 
			
		||||
     Play();
 | 
			
		||||
  else {
 | 
			
		||||
     LOCK_THREAD;
 | 
			
		||||
     if (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))
 | 
			
		||||
        Empty();
 | 
			
		||||
     if (playMode == pmFast || (playMode == pmSlow && playDir == pdBackward)) {
 | 
			
		||||
        if (!(DeviceHasIBPTrickSpeed() && playDir == pdForward))
 | 
			
		||||
           Empty();
 | 
			
		||||
        }
 | 
			
		||||
     DeviceFreeze();
 | 
			
		||||
     playMode = pmPause;
 | 
			
		||||
     }
 | 
			
		||||
@@ -548,8 +550,10 @@ void cDvbPlayer::Play(void)
 | 
			
		||||
{
 | 
			
		||||
  if (playMode != pmPlay) {
 | 
			
		||||
     LOCK_THREAD;
 | 
			
		||||
     if (playMode == pmStill || playMode == pmFast || (playMode == pmSlow && playDir == pdBackward))
 | 
			
		||||
        Empty();
 | 
			
		||||
     if (playMode == pmStill || playMode == pmFast || (playMode == pmSlow && playDir == pdBackward)) {
 | 
			
		||||
        if (!(DeviceHasIBPTrickSpeed() && playDir == pdForward))
 | 
			
		||||
           Empty();
 | 
			
		||||
        }
 | 
			
		||||
     DevicePlay();
 | 
			
		||||
     playMode = pmPlay;
 | 
			
		||||
     playDir = pdForward;
 | 
			
		||||
@@ -572,7 +576,8 @@ void cDvbPlayer::Forward(void)
 | 
			
		||||
            // run into pmPlay
 | 
			
		||||
       case pmPlay: {
 | 
			
		||||
            LOCK_THREAD;
 | 
			
		||||
            Empty();
 | 
			
		||||
            if (!(DeviceHasIBPTrickSpeed() && playDir == pdForward))
 | 
			
		||||
               Empty();
 | 
			
		||||
            DeviceMute();
 | 
			
		||||
            playMode = pmFast;
 | 
			
		||||
            playDir = pdForward;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user