summaryrefslogtreecommitdiff
path: root/streamdevice.c
diff options
context:
space:
mode:
authorzwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf>2007-02-11 23:40:56 +0000
committerzwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf>2007-02-11 23:40:56 +0000
commitc8eb1459144bd0117d9dbd2ab4c1d1927d4fa13b (patch)
tree116aeb0a7ecd8e49ed91d33ce685a8c61445f01a /streamdevice.c
parenta4ccf016ce8427c0a3740219480517eaa1efb475 (diff)
downloadvdr-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.c33
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);