X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Finfo_panels.cpp;h=506e6535992afd1efaceb4515559f3745b41db6d;hb=7f48382793df3f420d48d63940ad92cbf7dcf447;hp=30a517033931cd54a37ee207313025210be5081a;hpb=8cc3d3c260ce83e9e3fcaf52aa9b40920e49ae4f;p=vlc diff --git a/modules/gui/qt4/components/info_panels.cpp b/modules/gui/qt4/components/info_panels.cpp index 30a5170339..506e653599 100644 --- a/modules/gui/qt4/components/info_panels.cpp +++ b/modules/gui/qt4/components/info_panels.cpp @@ -23,6 +23,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#define __STDC_FORMAT_MACROS 1 +#define __STDC_CONSTANT_MACROS 1 + #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -32,6 +35,8 @@ #include "components/interface_widgets.hpp" #include +#include +#include #include #include @@ -55,6 +60,7 @@ MetaPanel::MetaPanel( QWidget *parent, : QWidget( parent ), p_intf( _p_intf ) { QGridLayout *metaLayout = new QGridLayout( this ); + metaLayout->setVerticalSpacing( 12 ); int line = 0; /* Counter for GridLayout */ p_input = NULL; @@ -136,6 +142,7 @@ MetaPanel::MetaPanel( QWidget *parent, metaLayout->setColumnStretch( 1, 2 ); metaLayout->setColumnMinimumWidth ( 1, 80 ); + metaLayout->setRowStretch( line, 10 ); #undef ADD_META #undef ADD_META_2 @@ -184,26 +191,25 @@ void MetaPanel::update( input_item_t *p_item ) free( psz_meta ); /* Name / Title */ - psz_meta = input_item_GetTitle( p_item ); - char *psz_name = input_item_GetName( p_item ); - if( !EMPTY_STR( psz_meta ) ) + psz_meta = input_item_GetTitleFbName( p_item ); + if( psz_meta ) + { title_text->setText( qfu( psz_meta ) ); - else if( !EMPTY_STR( psz_name ) ) - title_text->setText( qfu( psz_name ) ); - else title_text->setText( "" ); - free( psz_meta ); - free( psz_name ); + free( psz_meta ); + } + else + title_text->setText( "" ); /* URL / URI */ psz_meta = input_item_GetURL( p_item ); if( !EMPTY_STR( psz_meta ) ) - emit uriSet( QString( psz_meta ) ); + emit uriSet( qfu( psz_meta ) ); else { free( psz_meta ); psz_meta = input_item_GetURI( p_item ); if( !EMPTY_STR( psz_meta ) ) - emit uriSet( QString( psz_meta ) ); + emit uriSet( qfu( psz_meta ) ); } free( psz_meta ); @@ -217,7 +223,8 @@ void MetaPanel::update( input_item_t *p_item ) UPDATE_META( NowPlaying, nowplaying_text ); UPDATE_META( Publisher, publisher_text ); // UPDATE_META( Setting, setting_text ); -// UPDATE_META( EncodedBy, encodedby_text ); +//FIXME this is wrong if has Publisher and EncodedBy fields + UPDATE_META( EncodedBy, publisher_text ); UPDATE_META( Date, date_text ); UPDATE_META( TrackNum, seqnum_text ); @@ -226,6 +233,20 @@ void MetaPanel::update( input_item_t *p_item ) #undef UPDATE_META_INT #undef UPDATE_META + // If a artURL is available as a local file, directly display it ! + + QString file; + char *psz_art = input_item_GetArtURL( p_item ); + if( psz_art ) + { + char *psz = make_path( psz_art ); + free( psz_art ); + file = qfu( psz ); + free( psz ); + } + + art_cover->showArtUpdate( file ); + } /** @@ -233,31 +254,9 @@ void MetaPanel::update( input_item_t *p_item ) **/ void MetaPanel::saveMeta() { - playlist_t *p_playlist; - - meta_export_t p_export; - p_export.p_item = p_input; - if( p_input == NULL ) return; - /* we can write meta data only in a file */ - vlc_mutex_lock( &p_input->lock ); - int i_type = p_input->i_type; - vlc_mutex_unlock( &p_input->lock ); - if( i_type == ITEM_TYPE_FILE ) - { - char *psz_uri_orig = input_item_GetURI( p_input ); - char *psz_uri = psz_uri_orig; - if( !strncmp( psz_uri, "file://", 7 ) ) - psz_uri += 7; /* strlen("file://") = 7 */ - - p_export.psz_file = strndup( psz_uri, PATH_MAX ); - free( psz_uri_orig ); - } - else - return; - /* now we read the modified meta data */ input_item_SetTitle( p_input, qtu( title_text->text() ) ); input_item_SetArtist( p_input, qtu( artist_text->text() ) ); @@ -270,15 +269,8 @@ void MetaPanel::saveMeta() input_item_SetPublisher( p_input, qtu( publisher_text->text() ) ); input_item_SetDescription( p_input, qtu( description_text->text() ) ); - p_playlist = pl_Hold( p_intf ); - PL_LOCK; - p_playlist->p_private = &p_export; - - module_t *p_mod = module_need( p_playlist, "meta writer", NULL, false ); - if( p_mod ) - module_unneed( p_playlist, p_mod ); - PL_UNLOCK; - pl_Release( p_intf ); + playlist_t *p_playlist = pl_Get( p_intf ); + input_item_WriteMeta( VLC_OBJECT(p_playlist), p_input ); /* Reset the status of the mode. No need to emit any signal because parent is the only caller */ @@ -362,7 +354,6 @@ void ExtraMetaPanel::update( input_item_t *p_item ) return; } - QStringList tempItem; QList items; extraMetaTree->clear(); @@ -375,13 +366,12 @@ void ExtraMetaPanel::update( input_item_t *p_item ) return; } - vlc_dictionary_t * p_dict = &p_meta->extra_tags; - char ** ppsz_allkey = vlc_dictionary_all_keys( p_dict ); + char ** ppsz_allkey = vlc_meta_CopyExtraNames( p_meta); for( int i = 0; ppsz_allkey[i] ; i++ ) { - const char * psz_value = (const char *)vlc_dictionary_value_for_key( - p_dict, ppsz_allkey[i] ); + const char * psz_value = vlc_meta_GetExtra( p_meta, ppsz_allkey[i] ); + QStringList tempItem; tempItem.append( qfu( ppsz_allkey[i] ) + " : "); tempItem.append( qfu( psz_value ) ); items.append( new QTreeWidgetItem ( extraMetaTree, tempItem ) ); @@ -422,7 +412,10 @@ InfoPanel::InfoPanel( QWidget *parent, InfoTree = new QTreeWidget(this); InfoTree->setColumnCount( 1 ); + InfoTree->setColumnWidth( 0, 20000 ); InfoTree->header()->hide(); +// InfoTree->header()->setStretchLastSection(false); +// InfoTree->header()->setResizeMode(QHeaderView::ResizeToContents); layout->addWidget(InfoTree, 1, 0 ); } @@ -490,8 +483,8 @@ InputStatsPanel::InputStatsPanel( QWidget *parent, QList items; - QLabel *topLabel = new QLabel( qtr( "Statistics about the currently " - "playing media or stream." ) ); + QLabel *topLabel = new QLabel( qtr( "Current" + " media / stream " "statistics") ); topLabel->setWordWrap( true ); layout->addWidget( topLabel, 0, 0 ); @@ -516,36 +509,43 @@ InputStatsPanel::InputStatsPanel( QWidget *parent, /* Create the main categories */ CREATE_CATEGORY( audio, qtr("Audio") ); CREATE_CATEGORY( video, qtr("Video") ); - CREATE_CATEGORY( input, qtr("Input") ); - CREATE_CATEGORY( streaming, qtr("Streaming") ); + CREATE_CATEGORY( input, qtr("Input/Read") ); + CREATE_CATEGORY( streaming, qtr("Output/Written/Sent") ); - CREATE_AND_ADD_TO_CAT( read_media_stat, qtr("Read at media"), - "0", input , "kB" ); + CREATE_AND_ADD_TO_CAT( read_media_stat, qtr("Media data size"), + "0", input , "KiB" ); CREATE_AND_ADD_TO_CAT( input_bitrate_stat, qtr("Input bitrate"), "0", input, "kb/s" ); - CREATE_AND_ADD_TO_CAT( demuxed_stat, qtr("Demuxed"), "0", input, "kB") ; - CREATE_AND_ADD_TO_CAT( stream_bitrate_stat, qtr("Stream bitrate"), + CREATE_AND_ADD_TO_CAT( demuxed_stat, qtr("Demuxed data size"), "0", input, "KiB") ; + CREATE_AND_ADD_TO_CAT( stream_bitrate_stat, qtr("Content bitrate"), "0", input, "kb/s" ); - - CREATE_AND_ADD_TO_CAT( vdecoded_stat, qtr("Decoded blocks"), - "0", video, "" ); - CREATE_AND_ADD_TO_CAT( vdisplayed_stat, qtr("Displayed frames"), - "0", video, "" ); - CREATE_AND_ADD_TO_CAT( vlost_frames_stat, qtr("Lost frames"), - "0", video, "" ); -// CREATE_AND_ADD_TO_CAT( vfps_stat, qtr("FPS"), "0", video, "" ); - - CREATE_AND_ADD_TO_CAT( send_stat, qtr("Sent packets"), "0", streaming, "" ); - CREATE_AND_ADD_TO_CAT( send_bytes_stat, qtr("Sent bytes"), - "0", streaming, "kB" ); - CREATE_AND_ADD_TO_CAT( send_bitrate_stat, qtr("Sent bitrate"), + CREATE_AND_ADD_TO_CAT( corrupted_stat, qtr("Discarded (corrupted)"), + "0", input, "" ); + CREATE_AND_ADD_TO_CAT( discontinuity_stat, qtr("Dropped (discontinued)"), + "0", input, "" ); + + CREATE_AND_ADD_TO_CAT( vdecoded_stat, qtr("Decoded"), + "0", video, qtr("blocks") ); + CREATE_AND_ADD_TO_CAT( vdisplayed_stat, qtr("Displayed"), + "0", video, qtr("frames") ); + CREATE_AND_ADD_TO_CAT( vlost_frames_stat, qtr("Lost"), + "0", video, qtr("frames") ); + + CREATE_AND_ADD_TO_CAT( send_stat, qtr("Sent"), "0", streaming, qtr("packets") ); + CREATE_AND_ADD_TO_CAT( send_bytes_stat, qtr("Sent"), + "0", streaming, "KiB" ); + CREATE_AND_ADD_TO_CAT( send_bitrate_stat, qtr("Upstream rate"), "0", streaming, "kb/s" ); - CREATE_AND_ADD_TO_CAT( adecoded_stat, qtr("Decoded blocks"), - "0", audio, "" ); - CREATE_AND_ADD_TO_CAT( aplayed_stat, qtr("Played buffers"), - "0", audio, "" ); - CREATE_AND_ADD_TO_CAT( alost_stat, qtr("Lost buffers"), "0", audio, "" ); + CREATE_AND_ADD_TO_CAT( adecoded_stat, qtr("Decoded"), + "0", audio, qtr("blocks") ); + CREATE_AND_ADD_TO_CAT( aplayed_stat, qtr("Played"), + "0", audio, qtr("buffers") ); + CREATE_AND_ADD_TO_CAT( alost_stat, qtr("Lost"), "0", audio, qtr("buffers") ); + +#undef CREATE_AND_ADD_TO_CAT +#undef CREATE_CATEGORY +#undef CREATE_TREE_ITEM input->setExpanded( true ); video->setExpanded( true ); @@ -569,33 +569,35 @@ void InputStatsPanel::update( input_item_t *p_item ) #define UPDATE( widget, format, calc... ) \ { QString str; widget->setText( 1 , str.sprintf( format, ## calc ) ); } - UPDATE( read_media_stat, "%8.0f", - (float)(p_item->p_stats->i_read_bytes)/1000); + UPDATE( read_media_stat, "%"PRId64, + (p_item->p_stats->i_read_bytes / 1024 ) ); UPDATE( input_bitrate_stat, "%6.0f", - (float)(p_item->p_stats->f_input_bitrate * 8000 )); - UPDATE( demuxed_stat, "%8.0f", - (float)(p_item->p_stats->i_demux_read_bytes)/1000 ); + (float)(p_item->p_stats->f_input_bitrate * 8000 )); + UPDATE( demuxed_stat, "%"PRId64, + (p_item->p_stats->i_demux_read_bytes / 1024 ) ); UPDATE( stream_bitrate_stat, "%6.0f", - (float)(p_item->p_stats->f_demux_bitrate * 8000 )); + (float)(p_item->p_stats->f_demux_bitrate * 8000 )); + UPDATE( corrupted_stat, "%"PRId64, p_item->p_stats->i_demux_corrupted ); + UPDATE( discontinuity_stat, "%"PRId64, p_item->p_stats->i_demux_discontinuity ); /* Video */ - UPDATE( vdecoded_stat, "%5i", p_item->p_stats->i_decoded_video ); - UPDATE( vdisplayed_stat, "%5i", p_item->p_stats->i_displayed_pictures ); - UPDATE( vlost_frames_stat, "%5i", p_item->p_stats->i_lost_pictures ); -/* UPDATE( vfps_stat, "%5f", p_item->p_stats->i_lost_pictures ); -input_Control( p_input_thread, INPUT_GET_VIDEO_FPS, &f_fps */ + UPDATE( vdecoded_stat, "%"PRId64, p_item->p_stats->i_decoded_video ); + UPDATE( vdisplayed_stat, "%"PRId64, p_item->p_stats->i_displayed_pictures ); + UPDATE( vlost_frames_stat, "%"PRId64, p_item->p_stats->i_lost_pictures ); /* Sout */ - UPDATE( send_stat, "%5i", p_item->p_stats->i_sent_packets ); - UPDATE( send_bytes_stat, "%8.0f", - (float)(p_item->p_stats->i_sent_bytes)/1000 ); + UPDATE( send_stat, "%"PRId64, p_item->p_stats->i_sent_packets ); + UPDATE( send_bytes_stat, "%"PRId64, + (p_item->p_stats->i_sent_bytes)/ 1024 ); UPDATE( send_bitrate_stat, "%6.0f", - (float)(p_item->p_stats->f_send_bitrate*8)*1000 ); + (float)(p_item->p_stats->f_send_bitrate * 8000 ) ); /* Audio*/ - UPDATE( adecoded_stat, "%5i", p_item->p_stats->i_decoded_audio ); - UPDATE( aplayed_stat, "%5i", p_item->p_stats->i_played_abuffers ); - UPDATE( alost_stat, "%5i", p_item->p_stats->i_lost_abuffers ); + UPDATE( adecoded_stat, "%"PRId64, p_item->p_stats->i_decoded_audio ); + UPDATE( aplayed_stat, "%"PRId64, p_item->p_stats->i_played_abuffers ); + UPDATE( alost_stat, "%"PRId64, p_item->p_stats->i_lost_abuffers ); + +#undef UPDATE vlc_mutex_unlock(& p_item->p_stats->lock ); }