author | harlekin <harlekin> | 2002-08-18 23:15:50 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2002-08-18 23:15:50 (UTC) |
commit | d92fbca743e676182a8f33ae4c28044031143fb0 (patch) (side-by-side diff) | |
tree | 557b19a000a897e46ed1a8e18a4fdd41aa199e0d | |
parent | bec883a38720a1e1a975e5474a3085d149cf935c (diff) | |
download | opie-d92fbca743e676182a8f33ae4c28044031143fb0.zip opie-d92fbca743e676182a8f33ae4c28044031143fb0.tar.gz opie-d92fbca743e676182a8f33ae4c28044031143fb0.tar.bz2 |
small fixes regarding shoutcast, but for now user need to have http:// anything / as shoutcast url
-rw-r--r-- | noncore/multimedia/opieplayer2/audiowidget.cpp | 67 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/lib.cpp | 4 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/mediadetect.cpp | 5 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/opieplayer2.pro | 1 |
4 files changed, 39 insertions, 38 deletions
diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp index 6d867e5..bf3590b 100644 --- a/noncore/multimedia/opieplayer2/audiowidget.cpp +++ b/noncore/multimedia/opieplayer2/audiowidget.cpp @@ -1,593 +1,590 @@ /* This file is part of the Opie Project Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 L. Potter <ljp@llornkcor.com> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This program is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=|` MERCHANTABILITY or FITNESS FOR A _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. .` .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qwidget.h> #include <qpixmap.h> #include <qbutton.h> #include <qpainter.h> #include <qframe.h> #include <qlayout.h> #include <stdlib.h> #include <stdio.h> #include "audiowidget.h" #include "mediaplayerstate.h" extern MediaPlayerState *mediaPlayerState; static const int xo = -2; // movable x offset static const int yo = 22; // movable y offset Ticker::Ticker( QWidget* parent=0 ) : QFrame( parent ) { setFrameStyle( WinPanel | Sunken ); setText( "No Song" ); } Ticker::~Ticker() { } void Ticker::setText( const QString& text ) { pos = 0; // reset it everytime the text is changed scrollText = text; pixelLen = fontMetrics().width( scrollText ); killTimers(); if ( pixelLen > width() ) { startTimer( 50 ); } update(); } void Ticker::timerEvent( QTimerEvent * ) { pos = ( pos + 1 > pixelLen ) ? 0 : pos + 1; scroll( -1, 0, contentsRect() ); repaint( FALSE ); } void Ticker::drawContents( QPainter *p ) { - for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen ) - p->drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText ); + for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen ) { + p->drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText ); + } QPixmap pm( width(), height() ); pm.fill( colorGroup().base() ); QPainter pmp( &pm ); for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen ) { pmp.drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText ); } p->drawPixmap( 0, 0, pm ); } struct MediaButton { - bool isToggle, isHeld, isDown; + bool isToggle, isHeld, isDown; }; //Layout information for the audioButtons (and if it is a toggle button or not) MediaButton audioButtons[] = { { TRUE, FALSE, FALSE }, // play { FALSE, FALSE, FALSE }, // stop { FALSE, FALSE, FALSE }, // next { FALSE, FALSE, FALSE }, // previous { FALSE, FALSE, FALSE }, // volume up { FALSE, FALSE, FALSE }, // volume down { TRUE, FALSE, FALSE }, // repeat/loop { FALSE, FALSE, FALSE }, // playlist { FALSE, FALSE, FALSE }, // forward { FALSE, FALSE, FALSE } // back }; const char *skin_mask_file_names[10] = { "play", "stop", "next", "prev", "up", "down", "loop", "playlist", "forward", "back" }; static void changeTextColor( QWidget *w ) { QPalette p = w->palette(); p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); w->setPalette( p ); } static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton)); AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) : - QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) { - + QWidget( parent, name, f ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ) { setCaption( tr("OpiePlayer") ); Config cfg("OpiePlayer"); cfg.setGroup("Options"); skin = cfg.readEntry("Skin","default"); - //skin = "scaleTest"; -// color of background, frame, degree of transparency + //skin = "scaleTest"; + // color of background, frame, degree of transparency QString skinPath = "opieplayer2/skins/" + skin; pixBg = new QPixmap( Resource::loadPixmap( QString("%1/background").arg(skinPath) ) ); imgUp = new QImage( Resource::loadImage( QString("%1/skin_up").arg(skinPath) ) ); imgDn = new QImage( Resource::loadImage( QString("%1/skin_down").arg(skinPath) ) ); imgButtonMask = new QImage( imgUp->width(), imgUp->height(), 8, 255 ); imgButtonMask->fill( 0 ); for ( int i = 0; i < 10; i++ ) { QString filename = QString(getenv("OPIEDIR")) + "/pics/" + skinPath + "/skin_mask_" + skin_mask_file_names[i] + ".png"; masks[i] = new QBitmap( filename ); if ( !masks[i]->isNull() ) { QImage imgMask = masks[i]->convertToImage(); uchar **dest = imgButtonMask->jumpTable(); for ( int y = 0; y < imgUp->height(); y++ ) { uchar *line = dest[y]; for ( int x = 0; x < imgUp->width(); x++ ) if ( !qRed( imgMask.pixel( x, y ) ) ) line[x] = i + 1; } } } for ( int i = 0; i < 10; i++ ) { buttonPixUp[i] = NULL; buttonPixDown[i] = NULL; } setBackgroundPixmap( *pixBg ); songInfo.setFocusPolicy( QWidget::NoFocus ); changeTextColor( &songInfo ); slider.setFixedHeight( 20 ); slider.setMinValue( 0 ); slider.setMaxValue( 1 ); slider.setFocusPolicy( QWidget::NoFocus ); slider.setBackgroundPixmap( *pixBg ); time.setFocusPolicy( QWidget::NoFocus ); time.setAlignment( Qt::AlignCenter ); time.setFrame(FALSE); changeTextColor( &time ); resizeEvent( NULL ); connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) ); connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) ); connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); -// connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) ); + // connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) ); connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) ); connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) ); connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) ); connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) ); // Intialise state setLength( mediaPlayerState->length() ); setPosition( mediaPlayerState->position() ); setLooping( mediaPlayerState->fullscreen() ); -// setPaused( mediaPlayerState->paused() ); + // setPaused( mediaPlayerState->paused() ); setPlaying( mediaPlayerState->playing() ); } AudioWidget::~AudioWidget() { for ( int i = 0; i < 10; i++ ) { delete buttonPixUp[i]; delete buttonPixDown[i]; } delete pixBg; delete imgUp; delete imgDn; delete imgButtonMask; for ( int i = 0; i < 10; i++ ) { delete masks[i]; } } QPixmap *combineImageWithBackground( QImage img, QPixmap bg, QPoint offset ) { QPixmap pix( img.width(), img.height() ); QPainter p( &pix ); p.drawTiledPixmap( pix.rect(), bg, offset ); p.drawImage( 0, 0, img ); return new QPixmap( pix ); } -QPixmap *maskPixToMask( QPixmap pix, QBitmap mask ) -{ +QPixmap *maskPixToMask( QPixmap pix, QBitmap mask ) { QPixmap *pixmap = new QPixmap( pix ); pixmap->setMask( mask ); return pixmap; } void AudioWidget::resizeEvent( QResizeEvent * ) { int h = height(); int w = width(); songInfo.setGeometry( QRect( 2, 10, w - 4, 20 ) ); slider.setFixedWidth( w - 110 ); slider.setGeometry( QRect( 15, h - 30, w - 90, 20 ) ); slider.setBackgroundOrigin( QWidget::ParentOrigin ); time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); xoff = ( w - imgUp->width() ) / 2; yoff = (( h - imgUp->height() ) / 2) - 10; QPoint p( xoff, yoff ); QPixmap *pixUp = combineImageWithBackground( *imgUp, *pixBg, p ); QPixmap *pixDn = combineImageWithBackground( *imgDn, *pixBg, p ); for ( int i = 0; i < 10; i++ ) { if ( !masks[i]->isNull() ) { delete buttonPixUp[i]; delete buttonPixDown[i]; buttonPixUp[i] = maskPixToMask( *pixUp, *masks[i] ); buttonPixDown[i] = maskPixToMask( *pixDn, *masks[i] ); } } delete pixUp; delete pixDn; } static bool audioSliderBeingMoved = FALSE; void AudioWidget::sliderPressed() { audioSliderBeingMoved = TRUE; } void AudioWidget::sliderReleased() { audioSliderBeingMoved = FALSE; if ( slider.width() == 0 ) return; long val = long((double)slider.value() * mediaPlayerState->length() / slider.width()); mediaPlayerState->setPosition( val ); } void AudioWidget::setPosition( long i ) { -// qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); + // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); updateSlider( i, mediaPlayerState->length() ); } void AudioWidget::setLength( long max ) { updateSlider( mediaPlayerState->position(), max ); } void AudioWidget::setView( char view ) { -// this isnt working for some reason + // this isnt working for some reason if ( mediaPlayerState->streaming() ) { qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>"); if( !slider.isHidden()) { slider.hide(); } disconnect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); disconnect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); } else { // this stops the slider from being moved, thus // does not stop stream when it reaches the end slider.show(); connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); } if ( view == 'a' ) { // startTimer( 150 ); showMaximized(); } else { killTimers(); hide(); } qApp->processEvents(); } static QString timeAsString( long length ) { int minutes = length / 60; int seconds = length % 60; return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); } void AudioWidget::updateSlider( long i, long max ) { time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); // qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ; if ( max == 0 ) { return; } // Will flicker too much if we don't do this // Scale to something reasonable int width = slider.width(); int val = int((double)i * width / max); if ( !audioSliderBeingMoved ) { if ( slider.value() != val ) { slider.setValue( val ); } if ( slider.maxValue() != width ) { slider.setMaxValue( width ); } } } void AudioWidget::setToggleButton( int i, bool down ) { qDebug("setToggleButton %d", i); if ( down != audioButtons[i].isDown ) { toggleButton( i ); } } void AudioWidget::toggleButton( int i ) { audioButtons[i].isDown = !audioButtons[i].isDown; QPainter p(this); paintButton ( &p, i ); } void AudioWidget::paintButton( QPainter *p, int i ) { if ( audioButtons[i].isDown ) { p->drawPixmap( xoff, yoff, *buttonPixDown[i] ); } else { p->drawPixmap( xoff, yoff, *buttonPixUp[i] ); } } void AudioWidget::skipFor() { skipDirection = +1; startTimer( 50 ); mediaPlayerState->setPosition( mediaPlayerState->position() + 2 ); } void AudioWidget::skipBack() { skipDirection = -1; startTimer( 50 ); mediaPlayerState->setPosition( mediaPlayerState->position() - 2 ); } void AudioWidget::stopSkip() { killTimers(); } void AudioWidget::timerEvent( QTimerEvent * ) { - if ( skipDirection == +1 ) { - mediaPlayerState->setPosition( mediaPlayerState->position() + 2 ); + if ( skipDirection == +1 ) { + mediaPlayerState->setPosition( mediaPlayerState->position() + 2 ); } else if ( skipDirection == -1 ) { mediaPlayerState->setPosition( mediaPlayerState->position() - 2 ); } } void AudioWidget::mouseMoveEvent( QMouseEvent *event ) { for ( int i = 0; i < numButtons; i++ ) { if ( event->state() == QMouseEvent::LeftButton ) { // The test to see if the mouse click is inside the button or not int x = event->pos().x() - xoff; int y = event->pos().y() - yoff; bool isOnButton = ( x > 0 && y > 0 && x < imgButtonMask->width() && y < imgButtonMask->height() && imgButtonMask->pixelIndex( x, y ) == i + 1 ); if ( isOnButton && !audioButtons[i].isHeld ) { audioButtons[i].isHeld = TRUE; toggleButton(i); switch (i) { case AudioVolumeUp: emit moreClicked(); return; case AudioVolumeDown: emit lessClicked(); return; case AudioForward: emit forwardClicked(); return; case AudioBack: emit backClicked(); return; } + } else if ( !isOnButton && audioButtons[i].isHeld ) { + audioButtons[i].isHeld = FALSE; + toggleButton(i); } - else if ( !isOnButton && audioButtons[i].isHeld ) { - audioButtons[i].isHeld = FALSE; - toggleButton(i); - } } else { if ( audioButtons[i].isHeld ) { audioButtons[i].isHeld = FALSE; if ( !audioButtons[i].isToggle ) { setToggleButton( i, FALSE ); } switch (i) { case AudioPlay: if( mediaPlayerState->isPaused ) { // setToggleButton( i, FALSE ); mediaPlayerState->setPaused( FALSE ); return; } else if( !mediaPlayerState->isPaused ) { // setToggleButton( i, TRUE ); mediaPlayerState->setPaused( TRUE ); return; } else { // setToggleButton( i, TRUE ); // mediaPlayerState->setPlaying( videoButtons[i].isDown ); } case AudioStop: mediaPlayerState->setPlaying(FALSE); return; case AudioNext: mediaPlayerState->setNext(); return; case AudioPrevious: mediaPlayerState->setPrev(); return; case AudioLoop: mediaPlayerState->setLooping(audioButtons[i].isDown); return; case AudioVolumeUp: emit moreReleased(); return; case AudioVolumeDown: emit lessReleased(); return; case AudioPlayList: mediaPlayerState->setList(); return; case AudioForward: emit forwardReleased(); return; case AudioBack: emit backReleased(); return; } } } } } void AudioWidget::mousePressEvent( QMouseEvent *event ) { mouseMoveEvent( event ); } void AudioWidget::mouseReleaseEvent( QMouseEvent *event ) { mouseMoveEvent( event ); } void AudioWidget::showEvent( QShowEvent* ) { QMouseEvent event( QEvent::MouseMove, QPoint( 0, 0 ), 0, 0 ); mouseMoveEvent( &event ); } void AudioWidget::closeEvent( QCloseEvent* ) { mediaPlayerState->setList(); } void AudioWidget::paintEvent( QPaintEvent * pe) { if ( !pe->erased() ) { // Combine with background and double buffer QPixmap pix( pe->rect().size() ); QPainter p( &pix ); p.translate( -pe->rect().topLeft().x(), -pe->rect().topLeft().y() ); p.drawTiledPixmap( pe->rect(), *pixBg, pe->rect().topLeft() ); for ( int i = 0; i < numButtons; i++ ) paintButton( &p, i ); QPainter p2( this ); p2.drawPixmap( pe->rect().topLeft(), pix ); } else { QPainter p( this ); for ( int i = 0; i < numButtons; i++ ) paintButton( &p, i ); } } -void AudioWidget::keyReleaseEvent( QKeyEvent *e) -{ +void AudioWidget::keyReleaseEvent( QKeyEvent *e) { switch ( e->key() ) { -////////////////////////////// Zaurus keys + ////////////////////////////// Zaurus keys case Key_Home: break; case Key_F9: //activity hide(); -// qDebug("Audio F9"); + // qDebug("Audio F9"); break; case Key_F10: //contacts break; case Key_F11: //menu mediaPlayerState->toggleBlank(); break; case Key_F12: //home break; case Key_F13: //mail mediaPlayerState->toggleBlank(); break; case Key_Space: { if(mediaPlayerState->playing()) { -// toggleButton(1); + // toggleButton(1); mediaPlayerState->setPlaying(FALSE); -// toggleButton(1); + // toggleButton(1); } else { -// toggleButton(0); + // toggleButton(0); mediaPlayerState->setPlaying(TRUE); -// toggleButton(0); + // toggleButton(0); } } break; case Key_Down: -// toggleButton(6); + // toggleButton(6); emit lessClicked(); emit lessReleased(); -// toggleButton(6); + // toggleButton(6); break; case Key_Up: -// toggleButton(5); + // toggleButton(5); emit moreClicked(); emit moreReleased(); -// toggleButton(5); + // toggleButton(5); break; case Key_Right: -// toggleButton(3); + // toggleButton(3); mediaPlayerState->setNext(); -// toggleButton(3); + // toggleButton(3); break; case Key_Left: -// toggleButton(4); + // toggleButton(4); mediaPlayerState->setPrev(); -// toggleButton(4); + // toggleButton(4); break; case Key_Escape: { #if defined(QT_QWS_IPAQ) if( mediaPlayerState->isPaused ) { setToggleButton( i, FALSE ); mediaPlayerState->setPaused( FALSE ); } else if( !mediaPlayerState->isPaused ) { setToggleButton( i, TRUE ); mediaPlayerState->setPaused( TRUE ); } #endif } break; }; } diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp index 39364ab..3a82a50 100644 --- a/noncore/multimedia/opieplayer2/lib.cpp +++ b/noncore/multimedia/opieplayer2/lib.cpp @@ -1,249 +1,249 @@ /* This file is part of the Opie Project Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 LJP <> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This program is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=|` MERCHANTABILITY or FITNESS FOR A _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. .` .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <stdio.h> #include <stdlib.h> #include <qimage.h> #include <qtextstream.h> #include <qpe/resource.h> #include <qfile.h> #include <qgfx_qws.h> #include <qdirectpainter_qws.h> #include "xinevideowidget.h" #include "frame.h" #include "lib.h" typedef void (*display_xine_frame_t) (void *user_data, uint8_t* frame, int width, int height,int bytes ); extern "C" { vo_driver_t* init_video_out_plugin( config_values_t* conf, void* video); int null_is_showing_video( vo_driver_t* self ); void null_set_show_video( vo_driver_t* self, int show ); int null_is_fullscreen( vo_driver_t* self ); void null_set_fullscreen( vo_driver_t* self, int screen ); int null_is_scaling( vo_driver_t* self ); void null_set_scaling( vo_driver_t* self, int scale ); void null_set_gui_width( vo_driver_t* self, int width ); void null_set_gui_height( vo_driver_t* self, int height ); void null_set_mode( vo_driver_t* self, int depth, int rgb ); void null_display_handler(vo_driver_t* self, display_xine_frame_t t, void* user_data); } using namespace XINE; Lib::Lib(XineVideoWidget* widget) { m_video = false; m_wid = widget; printf("Lib"); QCString str( getenv("HOME") ); str += "/Settings/opiexine.cf"; // get the configuration // not really OO, should be an extra class, later if ( !QFile(str).exists() ) { QFile f(str); f.open(IO_WriteOnly); QTextStream ts( &f ); ts << "misc.memcpy_method:glibc\n"; f.close(); } m_config = xine_config_file_init( str.data() ); // allocate oss for sound // and fb for framebuffer m_audioOutput= xine_load_audio_output_plugin( m_config, "oss") ; if (m_audioOutput == NULL ) printf("Failure\n"); else printf("Success\n"); // test code /* m_videoOutput = xine_load_video_output_plugin(m_config, "fb", VISUAL_TYPE_FB, 0 ); */ char** files = xine_list_video_output_plugins(3); char* out; int i = 0; while ( ( out = files[i] ) != 0 ) { printf("Video %s\n", out ); i++; } // m_xine = xine_init( m_videoOutput, // m_audioOutput, // m_config ); // test loading m_videoOutput = ::init_video_out_plugin( m_config, NULL ); if (m_wid != 0 ) { printf("!0\n" ); resize ( m_wid-> size ( )); ::null_set_mode( m_videoOutput, qt_screen->depth(), qt_screen->pixelType() ); m_wid-> setImage ( new QImage ( Resource::loadImage(""))); m_wid->repaint(); } null_display_handler( m_videoOutput, xine_display_frame, this ); m_xine = xine_init( m_videoOutput, m_audioOutput, m_config ); // install the event handler xine_register_event_listener( m_xine, xine_event_handler, this ); } Lib::~Lib() { delete m_config; xine_remove_event_listener( m_xine, xine_event_handler ); xine_exit( m_xine ); delete m_videoOutput; //delete m_audioOutput; } void Lib::resize ( const QSize &s ) { if ( s. width ( ) && s. height ( )) { ::null_set_gui_width( m_videoOutput, s. width() ); ::null_set_gui_height(m_videoOutput, s. height() ); } } QCString Lib::version() { QCString str( xine_get_str_version() ); return str; }; int Lib::majorVersion() { return xine_get_major_version(); } int Lib::minorVersion() { return xine_get_minor_version(); }; int Lib::subVersion() { return xine_get_sub_version(); } int Lib::play( const QString& fileName, int startPos, int start_time ) { QString str = fileName.stripWhiteSpace(); //workaround OpiePlayer bug - if (str.right(1) == QString::fromLatin1("/") ) - str = str.mid( str.length() -1 ); + //f (str.right(1) == QString::fromLatin1("/") ) + // str = str.mid( str.length() -1 ); return xine_play( m_xine, QFile::encodeName(str.utf8() ).data(), startPos, start_time); } void Lib::stop() { qDebug("<<<<<<<< STOP IN LIB TRIGGERED >>>>>>>"); xine_stop(m_xine ); } void Lib::pause(){ xine_set_speed( m_xine, SPEED_PAUSE ); } int Lib::speed() { return xine_get_speed( m_xine ); } void Lib::setSpeed( int speed ) { xine_set_speed( m_xine, speed ); } int Lib::status(){ return xine_get_status( m_xine ); } int Lib::currentPosition(){ return xine_get_current_position( m_xine ); } int Lib::currentTime() { return xine_get_current_time( m_xine ); }; int Lib::length() { return xine_get_stream_length( m_xine ); } bool Lib::isSeekable() { return xine_is_stream_seekable(m_xine); } Frame Lib::currentFrame() { Frame frame; return frame; }; int Lib::error() { return xine_get_error( m_xine ); }; void Lib::handleXineEvent( xine_event_t* t ) { if ( t->type == XINE_EVENT_PLAYBACK_FINISHED ) emit stopped(); } void Lib::setShowVideo( bool video ) { m_video = video; ::null_set_show_video( m_videoOutput, video ); } bool Lib::isShowingVideo() { return ::null_is_showing_video( m_videoOutput ); } void Lib::showVideoFullScreen( bool fullScreen ) { ::null_set_fullscreen( m_videoOutput, fullScreen ); } bool Lib::isVideoFullScreen() { return ::null_is_fullscreen( m_videoOutput ); } void Lib::setScaling( bool scale ) { ::null_set_scaling( m_videoOutput, scale ); } bool Lib::isScaling() { return ::null_is_scaling( m_videoOutput ); } void Lib::xine_event_handler( void* user_data, xine_event_t* t ) { ((Lib*)user_data)->handleXineEvent( t ); } void Lib::xine_display_frame( void* user_data, uint8_t *frame, int width, int height, int bytes ) { ((Lib*)user_data)->drawFrame( frame, width, height, bytes ); } void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) { if (!m_video ) { qWarning("not showing video now"); return; } // qWarning("called draw frame %d %d", width, height); m_wid->setImage( frame, width, height, bytes ); // m_wid->repaint(false); } diff --git a/noncore/multimedia/opieplayer2/mediadetect.cpp b/noncore/multimedia/opieplayer2/mediadetect.cpp index 5e0da88..91137db 100644 --- a/noncore/multimedia/opieplayer2/mediadetect.cpp +++ b/noncore/multimedia/opieplayer2/mediadetect.cpp @@ -1,40 +1,43 @@ #include <qstring.h> #include "mediadetect.h" MediaDetect::MediaDetect() { } MediaDetect::~MediaDetect() { } char MediaDetect::videoOrAudio( const QString& fileName ) { if( (fileName.lower()).right(4) == ".avi" || (fileName.lower()).right(4) == ".mpg" || (fileName.lower()).right(4) == ".asf" || (fileName.lower()).right(4) == ".mov" || (fileName.lower()).right(5) == ".mpeg" ) { qDebug("Video out taken"); return 'v'; } else if ( (fileName.lower()).right(4) == "·mp1" || (fileName.lower()).right(4) == ".mp3" || (fileName.lower()).right(4) == ".ogg" || (fileName.lower()).right(4) == ".wav" ) { qDebug("AUDIO out taken"); return 'a'; + } else if ( (fileName.lower()).left(7) == "http://" && + (fileName.lower()).right(1) == "/" ) { + return 'a'; } else { - return 'f'; + return 'f'; } } bool MediaDetect::isStreaming( const QString& fileName ) { // ugly if( (fileName.lower()).left(4) == "http" ) { return true; } else if ( (fileName.lower()).left(3) == "ftp" ) { return true; } else { return false; } } diff --git a/noncore/multimedia/opieplayer2/opieplayer2.pro b/noncore/multimedia/opieplayer2/opieplayer2.pro index edc4624..03540a1 100644 --- a/noncore/multimedia/opieplayer2/opieplayer2.pro +++ b/noncore/multimedia/opieplayer2/opieplayer2.pro @@ -1,23 +1,24 @@ TEMPLATE = app CONFIG = qt warn_on release +#CONFIG = qt warn_on debug #release DESTDIR = $(OPIEDIR)/bin HEADERS = playlistselection.h mediaplayerstate.h xinecontrol.h mediadetect.h\ videowidget.h audiowidget.h playlistwidget.h mediaplayer.h inputDialog.h \ frame.h lib.h xinevideowidget.h volumecontrol.h\ alphablend.h yuv2rgb.h SOURCES = main.cpp \ playlistselection.cpp mediaplayerstate.cpp xinecontrol.cpp mediadetect.cpp\ videowidget.cpp audiowidget.cpp playlistwidget.cpp mediaplayer.cpp inputDialog.cpp \ frame.cpp lib.cpp nullvideo.c xinevideowidget.cpp volumecontrol.cpp\ alphablend.c yuv2rgb.c yuv2rgb_arm.c yuv2rgb_arm4l.S TARGET = opieplayer2 INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include LIBS += -lqpe -lpthread -lopie -lxine -lxineutils MOC_DIR=qpeobj OBJECTS_DIR=qpeobj INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include |