diff options
author | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2007-02-11 23:40:56 +0000 |
---|---|---|
committer | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2007-02-11 23:40:56 +0000 |
commit | c8eb1459144bd0117d9dbd2ab4c1d1927d4fa13b (patch) | |
tree | 116aeb0a7ecd8e49ed91d33ce685a8c61445f01a /streamdevice.c | |
parent | a4ccf016ce8427c0a3740219480517eaa1efb475 (diff) | |
download | vdr-plugin-ffnetdev-c8eb1459144bd0117d9dbd2ab4c1d1927d4fa13b.tar.gz vdr-plugin-ffnetdev-c8eb1459144bd0117d9dbd2ab4c1d1927d4fa13b.tar.bz2 |
- noch höhere Bitrate jetzt möglich
- wiedergabe von DVD
git-svn-id: svn://svn.berlios.de/ffnetdev/trunk@28 1f4bef6d-8e0a-0410-8695-e467da8aaccf
Diffstat (limited to 'streamdevice.c')
-rw-r--r-- | streamdevice.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/streamdevice.c b/streamdevice.c index 283229c..d15b66a 100644 --- a/streamdevice.c +++ b/streamdevice.c @@ -25,6 +25,7 @@ cStreamDevice::cStreamDevice(void) cStreamDevice::~cStreamDevice(void) { dsyslog("[ffnetdev] Device: Destructor cStreamDevice \n"); + m_PlayState = psPlay; DELETENULL(m_Remux); } @@ -77,12 +78,14 @@ bool cStreamDevice::SetPlayMode(ePlayMode PlayMode) bool Forward; int Speed; pControl->GetReplayMode(m_Playing, Forward, Speed); - cClientControl::SendPlayState(PlayMode, m_Playing, Forward, Speed); + if (!cClientControl::SendPlayState(PlayMode, m_Playing, Forward, Speed)) + m_PlayState = psPlay; } else { m_Playing = false; - cClientControl::SendPlayState(PlayMode, false, false, 0); + if (!cClientControl::SendPlayState(PlayMode, false, false, 0)) + m_PlayState = psPlay; } return true; } @@ -96,7 +99,8 @@ void cStreamDevice::TrickSpeed(int Speed) bool Forward; int Speed; pControl->GetReplayMode(m_Playing, Forward, Speed); - cClientControl::SendPlayState(m_PlayMode, m_Playing, Forward, Speed); + if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, Forward, Speed)) + m_PlayState = psPlay; } } @@ -115,7 +119,8 @@ void cStreamDevice::Play(void) bool Forward; int Speed; pControl->GetReplayMode(m_Playing, Forward, Speed); - cClientControl::SendPlayState(m_PlayMode, m_Playing, Forward, Speed); + if (!cClientControl::SendPlayState(m_PlayMode, m_Playing, Forward, Speed)) + m_PlayState = psPlay; } // cDevice::Play(); @@ -140,7 +145,8 @@ void cStreamDevice::SetVolumeDevice(int Volume) void cStreamDevice::StillPicture(const uchar *Data, int Length) { - dsyslog("[ffnetdev] Device: StillPicture(not implemented).\n"); + dsyslog("[ffnetdev] Device: StillPicture %d Bytes.\n", Length); + cClientControl::SendStillPicture(Data, Length); } bool cStreamDevice::Poll(cPoller &Poller, int TimeoutMs) @@ -158,12 +164,14 @@ int cStreamDevice::PlayAudio(const uchar *Data, int Length, uchar Id) { if (cTSWorker::HaveStreamClient()) { - while (((m_Remux->InputFree() < Length) && (!m_Playing) || - (m_Remux->Available() > TCP_SEND_SIZE * 10) && (m_Playing)) && cTSWorker::HaveStreamClient()) + while ((((!m_Playing) && (m_Remux->InputFree() < Length)) || + ((m_Playing) && ((m_Remux->InputFree() < Length) || + (m_Remux->Fill() > TCP_SEND_SIZE * 10)))) && + (cTSWorker::HaveStreamClient())) cCondWait::SleepMs(1); int result=m_Remux->Put(Data, Length); if (result!=Length) { - fprintf(stderr,"[ffnetdev] Device: Did not put all in input buffer(audio). result:%d Length: %d Skipping Audio PES packet...\n", result, Length ); + dsyslog("[ffnetdev] Device: Did not put all in input buffer(audio). result:%d Length: %d Skipping Audio PES packet...\n", result, Length ); // Delete part of data already written to buffer m_Remux->DelInput(result); return (0); @@ -188,13 +196,14 @@ int cStreamDevice::PlayVideo(const uchar *Data, int Length) { if (cTSWorker::HaveStreamClient()) { - - while (((m_Remux->InputFree() < Length) && (!m_Playing) || - (m_Remux->Available() > TCP_SEND_SIZE * 10) && (m_Playing)) && cTSWorker::HaveStreamClient()) + while ((((!m_Playing) && (m_Remux->InputFree() < Length)) || + ((m_Playing) && ((m_Remux->InputFree() < Length) || + (m_Remux->Fill() > TCP_SEND_SIZE * 10)))) && + (cTSWorker::HaveStreamClient())) cCondWait::SleepMs(1); int result=m_Remux->Put(Data, Length); if (result!=Length) { - fprintf(stderr,"[ffnetdev] Device: Did not put all in input buffer(video). result:%d Length: %d Skipping Video PES packet...\n", result, Length ); + dsyslog("[ffnetdev] Device: Did not put all in input buffer(video). result:%d Length: %d Skipping Video PES packet...\n", result, Length ); // Delete part of data already written to buffer m_Remux->DelInput(result); return (0); |