diff options
author | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2007-02-18 21:57:59 +0000 |
---|---|---|
committer | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2007-02-18 21:57:59 +0000 |
commit | 1b942dd8aab5eed24ef5196a8dffdb645f2ff227 (patch) | |
tree | 7aa90cacc87b823e79ca550cde813a8281e92718 | |
parent | c8eb1459144bd0117d9dbd2ab4c1d1927d4fa13b (diff) | |
download | vdr-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.c | 20 | ||||
-rw-r--r-- | clientcontrol.h | 3 | ||||
-rw-r--r-- | ffnetdev.c | 12 | ||||
-rw-r--r-- | pes2ts.c | 6 | ||||
-rw-r--r-- | streamdevice.c | 55 | ||||
-rw-r--r-- | streamdevice.h | 2 |
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) { @@ -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); @@ -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; |