vlc | branch: master | Abel Tesfaye <[email protected]> | Thu Jul 25 13:40:47 2019 +0300| [c5264d1aa92530dc28bd60f6a9340fb69de56506] | committer: Jean-Baptiste Kempf
qt: add channel, position, audioDesc, videoDesc and resolution roles & properties > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c5264d1aa92530dc28bd60f6a9340fb69de56506 --- modules/gui/qt/components/mediacenter/mlvideo.cpp | 66 +++++++++++++++++++++- modules/gui/qt/components/mediacenter/mlvideo.hpp | 16 ++++++ .../gui/qt/components/mediacenter/mlvideomodel.cpp | 24 ++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) diff --git a/modules/gui/qt/components/mediacenter/mlvideo.cpp b/modules/gui/qt/components/mediacenter/mlvideo.cpp index 4305327be0..1d86ee5fab 100644 --- a/modules/gui/qt/components/mediacenter/mlvideo.cpp +++ b/modules/gui/qt/components/mediacenter/mlvideo.cpp @@ -30,6 +30,7 @@ MLVideo::MLVideo(vlc_medialibrary_t* ml, const vlc_ml_media_t* data, QObject* pa , m_thumbnail( QString::fromUtf8( data->thumbnails[VLC_ML_THUMBNAIL_SMALL].psz_mrl ) ) , m_playCount( data->i_playcount ) , m_thumbnailGenerated( data->thumbnails[VLC_ML_THUMBNAIL_SMALL].b_generated ) + , m_position( 0.f ) , m_ml_event_handle( nullptr, [this](vlc_ml_event_callback_t* cb ) { assert( m_ml != nullptr ); vlc_ml_event_unregister_callback( m_ml, cb ); @@ -64,8 +65,49 @@ MLVideo::MLVideo(vlc_medialibrary_t* ml, const vlc_ml_media_t* data, QObject* pa { m_progress = atoi( psz_progress ); free( psz_progress ); + + if( data->i_duration ) + m_position = m_progress / (float)data->i_duration; + } + + unsigned int numChannel = 0 , maxWidth = 0 , maxHeight = 0; + for( const vlc_ml_media_track_t& track: ml_range_iterate<vlc_ml_media_track_t>( data->p_tracks ) ) { + if ( track.i_type == VLC_ML_TRACK_TYPE_AUDIO ) { + numChannel = std::max( numChannel , track.a.i_nbChannels ); + + audioDesc += qtr( "\n\tCodec: %1\n\tLanguage: %2\n\tChannels: %3\n\tSample Rate: %4" ) + .arg( QString::fromUtf8( track.psz_codec )) + .arg( QString::fromUtf8( track.psz_language ) ) + .arg( QString::number( track.a.i_nbChannels) ) + .arg( QString::number( track.a.i_sampleRate ) ); + } + else if ( track.i_type == VLC_ML_TRACK_TYPE_VIDEO ){ + maxWidth = std::max( maxWidth, track.v.i_width ); + maxHeight = std::max( maxHeight, track.v.i_height ); + + videoDesc += qtr( "\n\tCodec: %1\n\tLanguage: %2\n\tFPS: %3" ) + .arg( QString::fromUtf8( track.psz_codec ) ) + .arg( QString::fromUtf8( track.psz_language ) ) + .arg( QString::number( track.v.i_fpsNum ) ); + } + } + + m_channel = ""; + if ( numChannel >= 8 ) + m_channel = "7.1"; + else if ( numChannel >= 6 ) + m_channel = "5.1"; + + m_resolution = "SD"; + if ( maxWidth >= 7680 && maxHeight >= 4320 ) + m_resolution = "8K"; + else if ( maxWidth >= 3840 && maxHeight >= 2160 ) + m_resolution = "4K"; + else if ( maxWidth >= 1440 && maxHeight >= 1080 ) + m_resolution = "HD"; + else if ( maxWidth >= 720 && maxHeight >= 1280 ) + m_resolution = "720p"; } -} MLVideo::MLVideo(const MLVideo& video, QObject* parent) : QObject( parent ) @@ -134,6 +176,14 @@ QString MLVideo::getMRL() const { return m_mrl; } +QString MLVideo::getResolutionName() const +{ + return m_resolution; +} +QString MLVideo::getChannel() const +{ + return m_channel; +} unsigned int MLVideo::getProgress() const { @@ -144,6 +194,20 @@ unsigned int MLVideo::getPlayCount() const { return m_playCount; } +float MLVideo::getSavedPosition() const +{ + return m_position; +} + +QString MLVideo::getVideoDesc() const +{ + return videoDesc; +} + +QString MLVideo::getAudioDesc() const +{ + return audioDesc; +} MLVideo*MLVideo::clone(QObject* parent) const { diff --git a/modules/gui/qt/components/mediacenter/mlvideo.hpp b/modules/gui/qt/components/mediacenter/mlvideo.hpp index f8f204878a..de4a94dc44 100644 --- a/modules/gui/qt/components/mediacenter/mlvideo.hpp +++ b/modules/gui/qt/components/mediacenter/mlvideo.hpp @@ -23,6 +23,8 @@ #include "config.h" #endif +#include "qt.hpp" + #include <QObject> #include <vlc_media_library.h> #include "mlhelper.hpp" @@ -41,6 +43,11 @@ class MLVideo : public QObject Q_PROPERTY(QString mrl READ getMRL CONSTANT); Q_PROPERTY(unsigned int progress READ getProgress CONSTANT); Q_PROPERTY(unsigned int playCount READ getPlayCount CONSTANT); + Q_PROPERTY(QString resolution_name READ getResolutionName CONSTANT); + Q_PROPERTY(QString channel READ getChannel CONSTANT); + Q_PROPERTY(float saved_position READ getSavedPosition CONSTANT); + Q_PROPERTY(QString audioDesc READ getAudioDesc CONSTANT); + Q_PROPERTY(QString videoDesc READ getVideoDesc CONSTANT); public: MLVideo(vlc_medialibrary_t *ml, const vlc_ml_media_t *data, QObject *parent = nullptr); @@ -49,9 +56,14 @@ public: QString getTitle() const; QString getThumbnail(); QString getDuration() const; + QString getResolutionName() const; + QString getChannel() const; QString getMRL() const; unsigned int getProgress() const; unsigned int getPlayCount() const; + float getSavedPosition() const; + QString getAudioDesc() const; + QString getVideoDesc() const; MLVideo* clone(QObject* parent = nullptr) const; @@ -71,9 +83,13 @@ private: QString m_thumbnail; QString m_duration; QString m_mrl; + QString m_resolution; + QString m_channel; unsigned int m_progress; unsigned int m_playCount; bool m_thumbnailGenerated; + float m_position; + QString audioDesc,videoDesc; std::unique_ptr<vlc_ml_event_callback_t, std::function<void(vlc_ml_event_callback_t*)>> m_ml_event_handle; diff --git a/modules/gui/qt/components/mediacenter/mlvideomodel.cpp b/modules/gui/qt/components/mediacenter/mlvideomodel.cpp index 021531bc58..01fe549d0f 100644 --- a/modules/gui/qt/components/mediacenter/mlvideomodel.cpp +++ b/modules/gui/qt/components/mediacenter/mlvideomodel.cpp @@ -27,6 +27,12 @@ enum Role { VIDEO_DURATION, VIDEO_PROGRESS, VIDEO_PLAYCOUNT, + VIDEO_RESOLUTION, + VIDEO_CHANNEL, + VIDEO_POSITION, + VIDEO_MRL, + VIDEO_VIDEO_TRACK, + VIDEO_AUDIO_TRACK, }; } @@ -62,6 +68,18 @@ QVariant MLVideoModel::data(const QModelIndex& index, int role) const return QVariant::fromValue( video->getProgress() ); case VIDEO_PLAYCOUNT: return QVariant::fromValue( video->getPlayCount() ); + case VIDEO_RESOLUTION: + return QVariant::fromValue( video->getResolutionName() ); + case VIDEO_CHANNEL: + return QVariant::fromValue( video->getChannel() ); + case VIDEO_POSITION: + return QVariant::fromValue( video->getSavedPosition() ); + case VIDEO_MRL: + return QVariant::fromValue( video->getMRL() ); + case VIDEO_VIDEO_TRACK: + return QVariant::fromValue( video->getVideoDesc() ); + case VIDEO_AUDIO_TRACK: + return QVariant::fromValue( video->getAudioDesc() ); default: return {}; } @@ -76,6 +94,12 @@ QHash<int, QByteArray> MLVideoModel::roleNames() const { VIDEO_DURATION, "duration" }, { VIDEO_PROGRESS, "progress" }, { VIDEO_PLAYCOUNT, "playcount" }, + { VIDEO_RESOLUTION, "resolution_name" }, + { VIDEO_CHANNEL, "channel" }, + { VIDEO_POSITION, "saved_position" }, + { VIDEO_MRL, "mrl" }, + { VIDEO_AUDIO_TRACK, "audioDesc" }, + { VIDEO_VIDEO_TRACK, "videoDesc" }, }; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
