⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediaplayerstate.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qtopia/qpeapplication.h>#define QTOPIA_INTERNAL_LANGLIST#include <qtopia/mediaplayerplugininterface.h>#include <qtopia/config.h>#include <qtopia/global.h>#include <qtopia/pluginloader.h>#include <qvaluelist.h>#include <qobject.h>#include <qtimer.h>#include <qdir.h>#include "audiodevice.h"#include "mediaplayerstate.h"#include "audiowidget.h"#include "videowidget.h"#include "maindocumentwidgetstack.h"#ifdef QT_NO_COMPONENT// Plugins which are compiled in when no plugin architecture available#include "../../3rdparty/plugins/codecs/libffmpeg/libffmpegpluginimpl.h"#endif#define MediaPlayerDebug(x)	qDebug x//#define MediaPlayerDebug(x)MediaPlayerState::MediaPlayerState( QObject *parent, const char *name )    : QObject( parent, name ), aw( 0 ), vw( 0 ), curDecoder( 0 ),	curDecoderVersion( Decoder_Unknown ), temporaryMuteRefCount( 0 ){    Config cfg( "MediaPlayer" );    readConfig( cfg );    // Start loading up the UIs up in the background if they haven't been already    QTimer::singleShot( 2000, this, SLOT( audioUI() ) );    QTimer::singleShot( 5000, this, SLOT( videoUI() ) );}MediaPlayerState::~MediaPlayerState(){    Config cfg( "MediaPlayer" );    writeConfig( cfg );    delete aw;    delete vw;}void MediaPlayerState::readConfig( Config& cfg ){    cfg.setGroup( "Options" );    isFullscreen = cfg.readBoolEntry( "FullScreen", FALSE );    isScaled = cfg.readBoolEntry( "Scaling", TRUE );    isLooping = cfg.readBoolEntry( "Looping", FALSE );    isShuffled = cfg.readBoolEntry( "Shuffle", FALSE );    curSkin = cfg.readEntry( "Skin", "default" );    isPlaying = FALSE;    isPaused = FALSE;    isSeekable = TRUE;    curPosition = 0;    curLength = 0;    curView = ListView;}void MediaPlayerState::writeConfig( Config& cfg ) const{    cfg.setGroup("Options");    cfg.writeEntry("FullScreen", isFullscreen );    cfg.writeEntry("Scaling", isScaled );    cfg.writeEntry("Looping", isLooping );    cfg.writeEntry("Shuffle", isShuffled );    cfg.writeEntry("Skin", curSkin );}AudioWidget* MediaPlayerState::audioUI(){    if ( !aw ) {	aw = new AudioWidget( mainDocumentWindow, curSkin, "audioUI" );	connect( aw,  SIGNAL( moreClicked() ),         this, SIGNAL( increaseVolume() ) );	connect( aw,  SIGNAL( lessClicked() ),         this, SIGNAL( decreaseVolume() ) );	connect( aw,  SIGNAL( moreReleased() ),        this, SIGNAL( endIncreaseVolume() ) );	connect( aw,  SIGNAL( lessReleased() ),        this, SIGNAL( endDecreaseVolume() ) );	connect( aw,  SIGNAL( forwardClicked() ),      this, SIGNAL( scanForward() ) );	connect( aw,  SIGNAL( backwardClicked() ),     this, SIGNAL( scanBackward() ) );	connect( aw,  SIGNAL( forwardReleased() ),     this, SIGNAL( endScanForward() ) );	connect( aw,  SIGNAL( backwardReleased() ),    this, SIGNAL( endScanBackward() ) );    }    return aw;}VideoWidget* MediaPlayerState::videoUI(){    if ( !vw ) {	vw = new VideoWidget( mainDocumentWindow, curSkin, "videoUI" );	connect( vw,  SIGNAL( forwardClicked() ),      this, SIGNAL( scanForward() ) );	connect( vw,  SIGNAL( backwardClicked() ),     this, SIGNAL( scanBackward() ) );	connect( vw,  SIGNAL( forwardReleased() ),     this, SIGNAL( endScanForward() ) );	connect( vw,  SIGNAL( backwardReleased() ),    this, SIGNAL( endScanBackward() ) );    }    return vw;}struct MediaPlayerPlugin {#ifndef QT_NO_COMPONENT    MediaPlayerPluginInterface *iface;#endif    MediaPlayerDecoder *decoder;    MediaPlayerEncoder *encoder;    DecoderVersion version;};static QValueList<MediaPlayerPlugin> pluginList;static PluginLoader *loader = 0;// Find the first decoder which supports this type of fileMediaPlayerDecoder *MediaPlayerState::decoder( const QString& file ){    if ( file.isNull() )	return curDecoder;    QValueList<MediaPlayerPlugin>::Iterator it;    for ( it = pluginList.begin(); it != pluginList.end(); ++it ) 	if ( (*it).decoder->isFileSupported( file ) ) {	    curDecoderVersion = (*it).version;	    return curDecoder = (*it).decoder;	}    curDecoderVersion = Decoder_Unknown;    return curDecoder = NULL;}// Find the first decoder which can play this streamed URLMediaPlayerDecoder *MediaPlayerState::streamingDecoder( const QString& url, const QString& mimetype ){    QValueList<MediaPlayerPlugin>::Iterator it;    for ( it = pluginList.begin(); it != pluginList.end(); ++it ) 	if ( (*it).version == Decoder_1_6 ) {	    MediaPlayerDecoder_1_6 *decoder = (MediaPlayerDecoder_1_6 *)(*it).decoder;	    if ( decoder->supportsStreaming() ) 		if ( decoder->canStreamURL( url, mimetype ) ) {		    curDecoderVersion = (*it).version;		    return curDecoder = decoder;		}	}    curDecoderVersion = Decoder_Unknown;    return curDecoder = NULL;}void MediaPlayerState::loadPlugins(){#ifndef QT_NO_COMPONENT    if ( loader ) {	QValueList<MediaPlayerPlugin>::Iterator mit;	for ( mit = pluginList.begin(); mit != pluginList.end(); ++mit ) {	    loader->releaseInterface( (*mit).iface );	}	pluginList.clear();	delete loader;    }    loader = new PluginLoader( "codecs" );    QStringList list = loader->list();    QStringList::Iterator it;    for ( it = list.begin(); it != list.end(); ++it ) {	MediaPlayerPluginInterface *iface = 0;	MediaPlayerDebug(( "querying: %s", (*it).latin1() )); // No tr	DecoderVersion ver = Decoder_Unknown;	// Some old plugins have dodgy queryInterface implementations which always anwser QS_OK	const QUuid IID_evilPlugin( 0x00000666, 0x0666, 0x0666, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x66 );	if ( loader->queryInterface( *it, IID_evilPlugin, (QUnknownInterface**)&iface ) == QS_OK ) {	    qDebug("Detected old evil plugin which answers to any old interface Id!");	    loader->queryInterface( *it, IID_MediaPlayerPlugin, (QUnknownInterface**)&iface );	    ver = Decoder_1_5;	} else if ( loader->queryInterface( *it, IID_MediaPlayerPlugin_1_6, (QUnknownInterface**)&iface ) == QS_OK ) 	    ver = Decoder_1_6;	else if ( loader->queryInterface( *it, IID_MediaPlayerPlugin, (QUnknownInterface**)&iface ) == QS_OK )	    ver = Decoder_1_5;	if ( ver != Decoder_Unknown ) {	    MediaPlayerDebug(( "loading: %s", (*it).latin1() )); // No tr	    MediaPlayerPlugin plugin;	    plugin.version = ver;	    plugin.iface = iface;	    plugin.decoder = plugin.iface->decoder();	    plugin.encoder = plugin.iface->encoder();	    pluginList.append( plugin );	}    }#else    pluginList.clear();        MediaPlayerPlugin *plugin1 = new MediaPlayerPlugin();    LibFFMpegPluginImpl *mpeg = new LibFFMpegPluginImpl();    plugin1->decoder = mpeg->decoder();    plugin1->encoder = mpeg->encoder();    pluginList.append( *plugin1 );#endif    if ( pluginList.count() ) 	MediaPlayerDebug(( "%i decoders found", pluginList.count() )); // No tr    else	MediaPlayerDebug(( "No decoders found" )); // No tr}void MediaPlayerState::startTemporaryMute(){    if ( temporaryMuteRefCount == 0 ) {	//qDebug("start mute");	AudioDevice::getVolume( temporaryLeftVol, temporaryRightVol, temporaryIsMuted );	if ( !temporaryIsMuted )	    AudioDevice::setVolume( 0, 0, FALSE ); // temporaryLeftVol, temporaryRightVol, TRUE );    }    temporaryMuteRefCount++;}void MediaPlayerState::stopTemporaryMute( int delay ){    QTimer::singleShot( delay, this, SLOT( stopTemporaryMute() ) );}void MediaPlayerState::stopTemporaryMute(){    temporaryMuteRefCount--;    if ( temporaryMuteRefCount <= 0 ) {	//qDebug("stop mute");	if ( !temporaryIsMuted )	    AudioDevice::setVolume( temporaryLeftVol, temporaryRightVol, FALSE );	temporaryMuteRefCount = 0;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -