summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2010-06-05 20:05:11 +0200
committerChristian Gmeiner <christian.gmeiner@gmail.com>2010-06-05 20:05:11 +0200
commitaf18e44f4d378dadfc08cb442c9e6a5116a84f51 (patch)
tree665278de97e24302181e5ac2e7a5d2e01c36369c
parentfd95042d556cf3174ec1fce011bea959e613ea64 (diff)
downloadvdr-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.c12
-rw-r--r--dxr3device.h2
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);