diff options
author | Christian Gmeiner <christian.gmeiner@gmail.com> | 2010-06-05 20:05:11 +0200 |
---|---|---|
committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2010-06-05 20:05:11 +0200 |
commit | af18e44f4d378dadfc08cb442c9e6a5116a84f51 (patch) | |
tree | 665278de97e24302181e5ac2e7a5d2e01c36369c | |
parent | fd95042d556cf3174ec1fce011bea959e613ea64 (diff) | |
download | vdr-plugin-dxr3-af18e44f4d378dadfc08cb442c9e6a5116a84f51.tar.gz vdr-plugin-dxr3-af18e44f4d378dadfc08cb442c9e6a5116a84f51.tar.bz2 |
fix playBackFrame
We need to define a pts for the backframe to play. Else it will
not get played.
-rw-r--r-- | dxr3device.c | 12 | ||||
-rw-r--r-- | dxr3device.h | 2 |
2 files changed, 10 insertions, 4 deletions
diff --git a/dxr3device.c b/dxr3device.c index e7e30b9..6167a4f 100644 --- a/dxr3device.c +++ b/dxr3device.c @@ -140,7 +140,6 @@ bool cDxr3Device::SetPlayMode(ePlayMode PlayMode) switch (PlayMode) { case pmNone: playSilentAudio(); - playBlackFrame(); audioOut->setEnabled(false); scrSet = false; @@ -150,6 +149,8 @@ bool cDxr3Device::SetPlayMode(ePlayMode PlayMode) CHECK(ioctl(fdControl, EM8300_IOCTL_SCR_GET, &val)); val += TIMESTAMPS_500MS * 4; CHECK(ioctl(fdControl, EM8300_IOCTL_SCR_SET, &val)); + + playBlackFrame(val + TIMESTAMPS_500MS); break; case pmAudioVideo: @@ -501,7 +502,7 @@ void cDxr3Device::claimDevices() CHECK(ioctl(fdControl, EM8300_IOCTL_GETBCS, &bcs)); setPlayMode(); - playBlackFrame(); + playBlackFrame(TIMESTAMPS_500MS); } void cDxr3Device::releaseDevices() @@ -568,6 +569,9 @@ void cDxr3Device::uploadFirmware() void cDxr3Device::setPlayMode() { + uint32_t val = 0; + CHECK(ioctl(fdControl, EM8300_IOCTL_SCR_SET, &val)); + int ioval = EM8300_PLAYMODE_PLAY; CHECK(ioctl(fdControl, EM8300_IOCTL_SET_PLAYMODE, &ioval)); writeRegister(0, MVCOMMAND_SYNC); @@ -599,11 +603,13 @@ void cDxr3Device::playVideoFrame(cDxr3PesFrame *frame, uint32_t pts) WriteAllOrNothing(fdVideo, data, len, 1000, 10); } -void cDxr3Device::playBlackFrame() +void cDxr3Device::playBlackFrame(uint32_t pts) { extern char blackframe[]; extern int blackframeLength; + CHECK(ioctl(fdVideo, EM8300_IOCTL_VIDEO_SETPTS, &pts)); + for (int i = 0; i < 3; i++) { WriteAllOrNothing(fdVideo, (const uchar*)blackframe, blackframeLength, 1000, 10); } diff --git a/dxr3device.h b/dxr3device.h index 0881817..22a1f42 100644 --- a/dxr3device.h +++ b/dxr3device.h @@ -114,7 +114,7 @@ private: void uploadFirmware(); void setPlayMode(); void playVideoFrame(cDxr3PesFrame *frame, uint32_t pts); - void playBlackFrame(); + void playBlackFrame(uint32_t pts); void playSilentAudio(); void writeRegister(int reg, int value); void setScr(uint32_t val); |