diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-08-05 13:04:15 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-08-05 13:04:15 +0000 |
| commit | f283e77337caad447dc77286f7f6e44e3c3a3174 (patch) | |
| tree | d312595dd640034e468dc000d8f3e54d86df1bc2 | |
| parent | fb245070e55dcdcdf54d3db1961d8cc7264f5779 (diff) | |
| download | enigma2-f283e77337caad447dc77286f7f6e44e3c3a3174.tar.gz enigma2-f283e77337caad447dc77286f7f6e44e3c3a3174.zip | |
add support for "frame rate changed" and "progressive changed" video event
(the last needs new drivers)
| -rw-r--r-- | lib/dvb/decoder.cpp | 14 | ||||
| -rw-r--r-- | lib/dvb/idvb.h | 8 | ||||
| -rw-r--r-- | lib/service/iservice.h | 2 | ||||
| -rw-r--r-- | 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<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) |
