self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
{
- iPlayableService.evUpdatedInfo: self.__evUpdatedInfo
+ iPlayableService.evUpdatedInfo: self.__evUpdatedInfo,
+ iPlayableService.evUser+11: self.__evDecodeError
})
def doNothing(self):
print "[__evUpdatedInfo] title %d of %d (%s)" % (currenttitle, totaltitles, sTitle)
self.readTitleInformation()
+ def __evDecodeError(self):
+ currPlay = self.session.nav.getCurrentService()
+ sVideoType = currPlay.info().getInfoString(iServiceInformation.sVideoType)
+ print "[__evDecodeError] video-codec %s can't be decoded by hardware" % (sVideoType)
+ self.session.open(MessageBox, _("This Dreambox can't decode %s video streams!") % sVideoType, type = MessageBox.TYPE_INFO,timeout = 10 )
+
def delMPTimer(self):
del self.rightKeyTimer
del self.leftKeyTimer
int all_ok = 0;
- m_gst_pipeline = gst_pipeline_new ("audio-player");
+ m_gst_pipeline = gst_pipeline_new ("mediaplayer");
if (!m_gst_pipeline)
eWarning("failed to create pipeline");
/* filesrc -> mpegdemux -> | queue_audio -> dvbaudiosink
| queue_video -> dvbvideosink */
- audio = gst_element_factory_make("dvbaudiosink", "audio");
+ audio = gst_element_factory_make("dvbaudiosink", "audiosink");
queue_audio = gst_element_factory_make("queue", "queue_audio");
- video = gst_element_factory_make("dvbvideosink", "video");
+ video = gst_element_factory_make("dvbvideosink", "videosink");
queue_video = gst_element_factory_make("queue", "queue_video");
if (is_mpeg_ps)
case sComment:
case sTracknumber:
case sGenre:
+ case sVideoType:
return resIsString;
case sCurrentTitle:
tag = GST_TAG_TRACK_NUMBER;
case sGenre:
tag = GST_TAG_GENRE;
break;
+ case sVideoType:
+ tag = GST_TAG_VIDEO_CODEC;
+ break;
default:
return "";
}
break;
case GST_MESSAGE_ERROR:
{
- gchar *debug;
+ gchar *debug, *sourceName;
GError *err;
+ GstObject *source;
+
+ source = GST_MESSAGE_SRC(msg);
+ sourceName = gst_object_get_name(source);
+
gst_message_parse_error (msg, &err, &debug);
g_free (debug);
- eWarning("Gstreamer error: %s", err->message);
+ eWarning("Gstreamer error: %s (%i) from %s", err->message, err->code, sourceName );
+ if ( err->domain == GST_STREAM_ERROR && err->code == GST_STREAM_ERROR_DECODE )
+ {
+ if ( g_strrstr(sourceName, "videosink") )
+ m_event((iPlayableService*)this, evUser+11);
+ }
g_error_free(err);
/* TODO: signal error condition to user */
break;