From f283e77337caad447dc77286f7f6e44e3c3a3174 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Tue, 5 Aug 2008 13:04:15 +0000 Subject: [PATCH] add support for "frame rate changed" and "progressive changed" video event (the last needs new drivers) --- lib/dvb/decoder.cpp | 14 ++++++++++++++ lib/dvb/idvb.h | 8 +++++++- lib/service/iservice.h | 2 ++ lib/service/servicedvb.cpp | 12 +++++++++++- 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 &event, ePtr &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 &ptr) -- 2.30.2