aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/dvb/decoder.cpp14
-rw-r--r--lib/dvb/idvb.h8
-rw-r--r--lib/service/iservice.h2
-rw-r--r--lib/service/servicedvb.cpp12
4 files changed, 34 insertions, 2 deletions
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp
index 7ad1a25d..71b3f39e 100644
--- a/lib/dvb/decoder.cpp
+++ b/lib/dvb/decoder.cpp
@@ -563,6 +563,20 @@ void eDVBVideo::video_event(int)
event.width = evt.u.size.w;
/* emit */ m_event(event);
}
+ else if (evt.type == VIDEO_EVENT_FRAME_RATE_CHANGED)
+ {
+ struct iTSMPEGDecoder::videoEvent event;
+ event.type = iTSMPEGDecoder::videoEvent::eventFrameRateChanged;
+ event.framerate = evt.u.frame_rate;
+ /* emit */ m_event(event);
+ }
+ else if (evt.type == 16 /*VIDEO_EVENT_PROGRESSIVE_CHANGED*/)
+ {
+ struct iTSMPEGDecoder::videoEvent event;
+ event.type = iTSMPEGDecoder::videoEvent::eventProgressiveChanged;
+ event.progressive = evt.u.frame_rate;
+ /* emit */ m_event(event);
+ }
else
eDebug("unhandled DVBAPI Video Event %d", evt.type);
}
diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h
index 2aee67e6..1030b534 100644
--- a/lib/dvb/idvb.h
+++ b/lib/dvb/idvb.h
@@ -697,10 +697,16 @@ public:
struct videoEvent
{
- enum { eventUnknown = 0, eventSizeChanged = VIDEO_EVENT_SIZE_CHANGED } type;
+ enum { eventUnknown = 0,
+ eventSizeChanged = VIDEO_EVENT_SIZE_CHANGED,
+ eventFrameRateChanged = VIDEO_EVENT_FRAME_RATE_CHANGED,
+ eventProgressiveChanged = 16
+ } type;
unsigned char aspect;
unsigned short height;
unsigned short width;
+ bool progressive;
+ unsigned short framerate;
};
virtual RESULT connectVideoEvent(const Slot1<void, struct videoEvent> &event, ePtr<eConnection> &connection) = 0;
diff --git a/lib/service/iservice.h b/lib/service/iservice.h
index f06938a6..7448a5e0 100644
--- a/lib/service/iservice.h
+++ b/lib/service/iservice.h
@@ -760,6 +760,8 @@ public:
evUpdatedRassInteractivePicMask,
evVideoSizeChanged,
+ evVideoFramerateChanged,
+ evVideoProgressiveChanged,
evStopped,
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 307c317f..e036307b 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -2954,7 +2954,17 @@ void eDVBServicePlay::setPCMDelay(int delay)
void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event)
{
memcpy(&m_videoEventData, &event, sizeof(iTSMPEGDecoder::videoEvent));
- m_event((iPlayableService*)this, evVideoSizeChanged);
+ switch(event.type) {
+ case iTSMPEGDecoder::videoEvent::eventSizeChanged:
+ m_event((iPlayableService*)this, evVideoSizeChanged);
+ break;
+ case iTSMPEGDecoder::videoEvent::eventFrameRateChanged:
+ m_event((iPlayableService*)this, evVideoFramerateChanged);
+ break;
+ case iTSMPEGDecoder::videoEvent::eventProgressiveChanged:
+ m_event((iPlayableService*)this, evVideoProgressiveChanged);
+ break;
+ }
}
RESULT eDVBServicePlay::stream(ePtr<iStreamableService> &ptr)