parent
0a1f4e12e2
commit
508e5f278b
@ -0,0 +1,101 @@
|
|||||||
|
Index: phonon/xine/xinestream.h
|
||||||
|
===================================================================
|
||||||
|
--- phonon/xine/xinestream.h (revision 924144)
|
||||||
|
+++ phonon/xine/xinestream.h (revision 924145)
|
||||||
|
@@ -86,7 +86,6 @@
|
||||||
|
//void needRewire(AudioPostList *postList);
|
||||||
|
void useGaplessPlayback(bool);
|
||||||
|
void useGapOf(int gap);
|
||||||
|
- void gaplessSwitchTo(const QUrl &url);
|
||||||
|
void gaplessSwitchTo(const QByteArray &mrl);
|
||||||
|
void closeBlocking();
|
||||||
|
void aboutToDeleteVideoWidget();
|
||||||
|
@@ -141,7 +140,6 @@
|
||||||
|
|
||||||
|
void unload();
|
||||||
|
public slots:
|
||||||
|
- void setUrl(const QUrl &url);
|
||||||
|
void setMrl(const QByteArray &mrl, StateForNewMrl = StoppedState);
|
||||||
|
void play();
|
||||||
|
void pause();
|
||||||
|
Index: phonon/xine/mediaobject.cpp
|
||||||
|
===================================================================
|
||||||
|
--- phonon/xine/mediaobject.cpp (revision 924144)
|
||||||
|
+++ phonon/xine/mediaobject.cpp (revision 924145)
|
||||||
|
@@ -317,6 +317,20 @@
|
||||||
|
setSourceInternal(source, HardSwitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static QByteArray mrlEncode(QByteArray mrl)
|
||||||
|
+{
|
||||||
|
+ for (int i = 0; i < mrl.size(); ++i) {
|
||||||
|
+ const unsigned char c = static_cast<unsigned char>(mrl.at(i));
|
||||||
|
+ if (c & 0x80 || c == '\\' || c < 32 || c == '%') {
|
||||||
|
+ char enc[4];
|
||||||
|
+ qsnprintf(enc, 4, "%%%02X", c);
|
||||||
|
+ mrl = mrl.left(i) + QByteArray(enc, 3) + mrl.mid(i + 1);
|
||||||
|
+ i += 2;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return mrl;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void MediaObject::setSourceInternal(const MediaSource &source, HowToSetTheUrl how)
|
||||||
|
{
|
||||||
|
//debug() << Q_FUNC_INFO;
|
||||||
|
@@ -340,13 +354,18 @@
|
||||||
|
m_stream->setError(Phonon::NormalError, tr("Cannot open media data at '<i>%1</i>'").arg(source.url().toString(QUrl::RemovePassword)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
- switch (how) {
|
||||||
|
- case GaplessSwitch:
|
||||||
|
- m_stream->gaplessSwitchTo(source.url());
|
||||||
|
- break;
|
||||||
|
- case HardSwitch:
|
||||||
|
- m_stream->setUrl(source.url());
|
||||||
|
- break;
|
||||||
|
+ {
|
||||||
|
+ const QByteArray &mrl = (source.url().scheme() == QLatin1String("file") ?
|
||||||
|
+ "file:/" + mrlEncode(QFile::encodeName(source.url().toLocalFile())) :
|
||||||
|
+ source.url().toEncoded());
|
||||||
|
+ switch (how) {
|
||||||
|
+ case GaplessSwitch:
|
||||||
|
+ m_stream->gaplessSwitchTo(mrl);
|
||||||
|
+ break;
|
||||||
|
+ case HardSwitch:
|
||||||
|
+ m_stream->setMrl(mrl);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MediaSource::Disc:
|
||||||
|
Index: phonon/xine/xinestream.cpp
|
||||||
|
===================================================================
|
||||||
|
--- phonon/xine/xinestream.cpp (revision 924144)
|
||||||
|
+++ phonon/xine/xinestream.cpp (revision 924145)
|
||||||
|
@@ -619,12 +619,6 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
// called from main thread
|
||||||
|
-void XineStream::gaplessSwitchTo(const QUrl &url)
|
||||||
|
-{
|
||||||
|
- gaplessSwitchTo(url.toEncoded());
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-// called from main thread
|
||||||
|
void XineStream::gaplessSwitchTo(const QByteArray &mrl)
|
||||||
|
{
|
||||||
|
QCoreApplication::postEvent(this, new GaplessSwitchEvent(mrl));
|
||||||
|
@@ -1707,12 +1701,6 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
// called from main thread
|
||||||
|
-void XineStream::setUrl(const QUrl &url)
|
||||||
|
-{
|
||||||
|
- setMrl(url.toEncoded());
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-// called from main thread
|
||||||
|
void XineStream::setMrl(const QByteArray &mrl, StateForNewMrl sfnm)
|
||||||
|
{
|
||||||
|
debug() << Q_FUNC_INFO << mrl << ", " << sfnm;
|
Loading…
Reference in new issue