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 /dxr3device.c | |
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.
Diffstat (limited to 'dxr3device.c')
-rw-r--r-- | dxr3device.c | 12 |
1 files changed, 9 insertions, 3 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); } |