From af18e44f4d378dadfc08cb442c9e6a5116a84f51 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Sat, 5 Jun 2010 20:05:11 +0200 Subject: fix playBackFrame We need to define a pts for the backframe to play. Else it will not get played. --- dxr3device.c | 12 +++++++++--- 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); -- cgit v1.2.3