summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf>2007-02-18 21:57:59 +0000
committerzwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf>2007-02-18 21:57:59 +0000
commit1b942dd8aab5eed24ef5196a8dffdb645f2ff227 (patch)
tree7aa90cacc87b823e79ca550cde813a8281e92718
parentc8eb1459144bd0117d9dbd2ab4c1d1927d4fa13b (diff)
downloadvdr-plugin-ffnetdev-1b942dd8aab5eed24ef5196a8dffdb645f2ff227.tar.gz
vdr-plugin-ffnetdev-1b942dd8aab5eed24ef5196a8dffdb645f2ff227.tar.bz2
- vor- und zurückspulen mit versch. Geschwindigkeiten, Pause
- DVD-Wedergabe macht Probleme git-svn-id: svn://svn.berlios.de/ffnetdev/trunk@29 1f4bef6d-8e0a-0410-8695-e467da8aaccf
-rw-r--r--clientcontrol.c20
-rw-r--r--clientcontrol.h3
-rw-r--r--ffnetdev.c12
-rw-r--r--pes2ts.c6
-rw-r--r--streamdevice.c55
-rw-r--r--streamdevice.h2
6 files changed, 62 insertions, 36 deletions
diff --git a/clientcontrol.c b/clientcontrol.c
index c3a3b05..f333725 100644
--- a/clientcontrol.c
+++ b/clientcontrol.c
@@ -214,7 +214,7 @@ bool cClientControl::SendPlayState(ePlayMode PlayMode, bool bPlay, bool bForward
data.pakType = ptPlayState;
data.dataLen = sizeof(state);
- dsyslog("dataLen %d, dataSize %d", data.dataLen, sizeof(data));
+ dsyslog("[ffnetdev] SendPlayState: PlayMode: %d, bPlay: %d, bForward: %d, iSpeed: %d", PlayMode, bPlay, bForward, iSpeed);
if (m_Instance->m_ClientSocket->Write(&data, sizeof(data)) == sizeof(data))
{
if (m_Instance->m_ClientSocket->Write(&state, sizeof(state)) == sizeof(state))
@@ -268,3 +268,21 @@ bool cClientControl::SendStillPicture(const uchar *Data, int Length)
else
return false;
}
+
+bool cClientControl::SendSFreeze()
+{
+ SClientControl data;
+ int written, available, done;
+
+ if ((m_Instance == NULL) || (m_Instance->m_ClientSocket == NULL))
+ return false;
+
+ data.pakType = ptFreeze;
+ data.dataLen = 0;
+ if (m_Instance->m_ClientSocket->Write(&data, sizeof(data)) == sizeof(data))
+ {
+ return true;
+ }
+ else
+ return false;
+}
diff --git a/clientcontrol.h b/clientcontrol.h
index 599dc5d..89a3969 100644
--- a/clientcontrol.h
+++ b/clientcontrol.h
@@ -13,7 +13,7 @@
#include "tools/socket.h"
#include "ffnetdev.h"
-enum CCPakType{ ptInfo=0, ptPlayState, ptPlayStateReq, ptStillPicture };
+enum CCPakType{ ptInfo=0, ptPlayState, ptPlayStateReq, ptStillPicture, ptFreeze };
struct SClientControl
{
@@ -72,6 +72,7 @@ public:
static bool SendPlayState(ePlayMode PlayMode, bool bPlay, bool bForward, int iSpeed);
static bool PlayStateReq(void) { return m_Instance->m_bPlayStateReq; };
static bool SendStillPicture(const uchar *Data, int Length);
+ static bool SendSFreeze();
};
inline bool cClientControl::Active(void) {
diff --git a/ffnetdev.c b/ffnetdev.c
index 64c2916..8304fc1 100644
--- a/ffnetdev.c
+++ b/ffnetdev.c
@@ -213,7 +213,11 @@ void cPluginFFNetDev::SetPrimaryDevice()
{
int i = 0;
while ((cOsd::IsOpen() > 0) && (i-- > 0))
- cRemote::Put(kBack);
+ cRemote::Put(kBack);
+
+ i = 0;
+ while ((strlen(m_ClientName) == 0) && (i++ < 2))
+ sleep(1);
if ((config.iAutoSetPrimaryDVB == 1) && (m_origPrimaryDevice == -1))
{
@@ -237,11 +241,7 @@ void cPluginFFNetDev::SetPrimaryDevice()
if(EnableRemote)
{
if (m_Remote == NULL)
- {
- i = 0;
- while ((strlen(m_ClientName) == 0) && (i++ < 2))
- sleep(1);
-
+ {
char str[30];
if (strlen(m_ClientName) > 0)
sprintf(str, "ffnetdev-%s", m_ClientName);
diff --git a/pes2ts.c b/pes2ts.c
index fa5a786..b783a42 100644
--- a/pes2ts.c
+++ b/pes2ts.c
@@ -291,9 +291,7 @@ void cPES2PESRemux::Action(void)
// check for valid stream id type: is it video or audio or unknown?
- if ( ((data[3]>=0xC0) && (data[3]<=0xDF)) ||
- (data[3] == 0xBD) ||
- ((data[3]>=0xE0) && (data[3]<=0xEF)))
+ if (data[3]>=0x00)
{
while (m_OutputBuffer->Free() < (int)packetlen)
{
@@ -311,7 +309,7 @@ void cPES2PESRemux::Action(void)
}
else if (data[3]>=0xBE)
{
- dsyslog("[ffnetdev] Remuxer: Padding stream removed.\n");
+ //dsyslog("[ffnetdev] Remuxer: Padding stream removed.\n");
m_InputBuffer->Del(packetlen);
InputMutex.Unlock();
continue;
diff --git a/streamdevice.c b/streamdevice.c
index d15b66a..17b33f2 100644
--- a/streamdevice.c
+++ b/streamdevice.c
@@ -75,16 +75,18 @@ bool cStreamDevice::SetPlayMode(ePlayMode PlayMode)
cControl *pControl = cControl::Control();
if (pControl)
{
- bool Forward;
- int Speed;
- pControl->GetReplayMode(m_Playing, Forward, Speed);
- if (!cClientControl::SendPlayState(PlayMode, m_Playing, Forward, Speed))
+ pControl->GetReplayMode(m_Playing, m_Forward, m_Speed);
+ if (m_Speed == -1)
+ m_Speed = 0;
+ if (!cClientControl::SendPlayState(PlayMode, m_Playing, m_Forward, m_Speed))
m_PlayState = psPlay;
}
else
{
m_Playing = false;
- if (!cClientControl::SendPlayState(PlayMode, false, false, 0))
+ m_Forward = true;
+ m_Speed = 0;
+ if (!cClientControl::SendPlayState(PlayMode, m_Playing, m_Forward, m_Speed))
m_PlayState = psPlay;
}
return true;
@@ -93,15 +95,14 @@ bool cStreamDevice::SetPlayMode(ePlayMode PlayMode)
void cStreamDevice::TrickSpeed(int Speed)
{
dsyslog("[ffnetdev] Device: Trickspeed. Speed: %d\n", Speed);
+
cControl *pControl = cControl::Control();
if (pControl)
- {
- bool Forward;
- int Speed;
- pControl->GetReplayMode(m_Playing, Forward, Speed);
- if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, Forward, Speed))
- m_PlayState = psPlay;
- }
+ pControl->GetReplayMode(m_Playing, m_Forward, m_Speed);
+
+ m_Speed = Speed;
+ if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, m_Forward, m_Speed))
+ m_PlayState = psPlay;
}
void cStreamDevice::Clear(void)
@@ -113,28 +114,34 @@ void cStreamDevice::Play(void)
{
dsyslog("[ffnetdev] Device: Play.\n");
- cControl *pControl = cControl::Control();
- if (pControl)
- {
- bool Forward;
- int Speed;
- pControl->GetReplayMode(m_Playing, Forward, Speed);
- if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, Forward, Speed))
- m_PlayState = psPlay;
- }
-
+ m_PlayMode = pmAudioVideo;
+ m_Playing = true;
+ m_Forward = true;
+ m_Speed = 0;
+ if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, m_Forward, m_Speed))
+ m_PlayState = psPlay;
+
// cDevice::Play();
}
void cStreamDevice::Freeze(void)
{
- dsyslog("[ffnetdev] Device: Freeze(not implemented).\n");
+ dsyslog("[ffnetdev] Device: Freeze.\n");
+
+ m_Playing = false;
+ cClientControl::SendSFreeze();
+
// cDevice::Freeze();
}
void cStreamDevice::Mute(void)
{
- dsyslog("[ffnetdev] Device: Mute(not implemented).\n");
+ dsyslog("[ffnetdev] Device: Mute.\n");
+
+ m_PlayMode = pmVideoOnly;
+ if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, m_Forward, m_Speed))
+ m_PlayState = psPlay;
+
// cDevice::Mute();
}
diff --git a/streamdevice.h b/streamdevice.h
index 412aafb..eca56ba 100644
--- a/streamdevice.h
+++ b/streamdevice.h
@@ -21,6 +21,8 @@ class cStreamDevice: public cDevice {
private:
cPESRemux *m_Remux;
bool m_Playing;
+ bool m_Forward;
+ int m_Speed;
ePlayState m_PlayState;
ePlayMode m_PlayMode;