007e4676308ded33fc54a28f8cb79ff9a047d321
[AGL/meta-agl-demo.git] / recipes-qt / qt5 / qtmultimedia / 0001-metadata-image-support-with-the-data-URL-scheme-for-.patch
1 From ed61f1d932c5c6d38458fcd2e1d5d154383f017e Mon Sep 17 00:00:00 2001
2 From: Tasuku Suzuki <tasuku.suzuki@qt.io>
3 Date: Mon, 12 Dec 2016 16:32:47 +0900
4 Subject: [PATCH] metadata image support with the "data" URL scheme for QtQuick
5
6 add posterImage, coverArtImage and thumbnailImage to metadata
7
8 Change-Id: I10b9bae10c219ffa41506d6e6b345020790217a6
9 ---
10  .../multimedia/qdeclarativemediametadata_p.h       | 33 ++++++++++++++++++++++
11  1 file changed, 33 insertions(+)
12
13 diff --git a/src/imports/multimedia/qdeclarativemediametadata_p.h b/src/imports/multimedia/qdeclarativemediametadata_p.h
14 index ede7f87..6a6a815 100644
15 --- a/src/imports/multimedia/qdeclarativemediametadata_p.h
16 +++ b/src/imports/multimedia/qdeclarativemediametadata_p.h
17 @@ -51,6 +51,9 @@
18  // We mean it.
19  //
20  
21 +#include <QtCore/QBuffer>
22 +#include <QtGui/QImage>
23 +#include <QtGui/QImageWriter>
24  #include <QtQml/qqml.h>
25  #include <QtMultimedia/qmediametadata.h>
26  #include <QtMultimedia/qmediaservice.h>
27 @@ -153,6 +156,9 @@ class QDeclarativeMediaMetaData : public QObject
28      Q_PROPERTY(QVariant gpsProcessingMethod READ gpsProcessingMethod WRITE setGPSProcessingMethod NOTIFY metaDataChanged)
29      Q_PROPERTY(QVariant gpsAreaInformation READ gpsAreaInformation WRITE setGPSAreaInformation NOTIFY metaDataChanged)
30  
31 +    Q_PROPERTY(QVariant posterImage READ posterImage NOTIFY metaDataChanged)
32 +    Q_PROPERTY(QVariant coverArtImage READ coverArtImage NOTIFY metaDataChanged)
33 +    Q_PROPERTY(QVariant thumbnailImage READ thumbnailImage NOTIFY metaDataChanged)
34  public:
35      QDeclarativeMediaMetaData(QMediaObject *player, QObject *parent = 0)
36          : QObject(parent)
37 @@ -425,6 +431,16 @@ QT_WARNING_POP
38      void setGPSAreaInformation(const QVariant &information) {
39          setMetaData(QMediaMetaData::GPSAreaInformation, information); }
40  
41 +    QVariant posterImage() const {
42 +        return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::PosterImage));
43 +    }
44 +    QVariant coverArtImage() const {
45 +        return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::CoverArtImage));
46 +    }
47 +    QVariant thumbnailImage() const {
48 +        return convertImageToUrl(m_mediaObject->metaData(QMediaMetaData::ThumbnailImage));
49 +    }
50 +
51  Q_SIGNALS:
52      void metaDataChanged();
53  
54 @@ -440,6 +456,23 @@ private:
55              m_writerControl->setMetaData(key, value);
56      }
57  
58 +    QUrl convertImageToUrl(const QVariant &variant) const
59 +    {
60 +        if (variant.type() != QVariant::Image)
61 +            return QUrl();
62 +
63 +        QImage image = variant.value<QImage>();
64 +        QByteArray data;
65 +        QBuffer buffer(&data);
66 +        buffer.open(QBuffer::WriteOnly);
67 +        QImageWriter png(&buffer, "png");
68 +        if (!png.write(image)) {
69 +            return QUrl();
70 +        }
71 +        buffer.close();
72 +        return QUrl(QStringLiteral("data:image/png;base64,") + data.toBase64());
73 +    }
74 +
75      QMediaObject *m_mediaObject;
76      QMetaDataWriterControl *m_writerControl;
77      bool m_requestedWriterControl;
78 -- 
79 2.7.4
80