author | harlekin <harlekin> | 2002-11-10 13:40:33 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2002-11-10 13:40:33 (UTC) |
commit | ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c (patch) (side-by-side diff) | |
tree | 5bef89c4dc116d09c1864778127ca9106e1f29ae | |
parent | ea3334042e9625c0f67c9a7293a482849f60e4e2 (diff) | |
download | opie-ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c.zip opie-ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c.tar.gz opie-ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c.tar.bz2 |
fixed seeking and further adaption to the new api
-rw-r--r-- | noncore/multimedia/opieplayer2/lib.cpp | 3 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/lib.h | 3 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/nullvideo.c | 8 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinecontrol.cpp | 11 |
4 files changed, 21 insertions, 4 deletions
diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp index 1ebbbd8..19b64e8 100644 --- a/noncore/multimedia/opieplayer2/lib.cpp +++ b/noncore/multimedia/opieplayer2/lib.cpp @@ -180,49 +180,50 @@ int Lib::status() { return xine_get_status( m_stream ); } int Lib::currentPosition() { xine_get_pos_length( m_stream, &m_pos, &m_time, &m_length ); return m_pos; } int Lib::currentTime() { xine_get_pos_length( m_stream, &m_pos, &m_time, &m_length ); return m_time/1000; } int Lib::length() { xine_get_pos_length( m_stream, &m_pos, &m_time, &m_length ); return m_length/1000; } bool Lib::isSeekable() { return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE ); } void Lib::seekTo( int time ) { //xine_trick_mode ( m_stream, XINE_TRICK_MODE_SEEK_TO_TIME, time ); NOT IMPLEMENTED YET IN XINE :_( - xine_play( m_stream, 0, time ); + // since its now milliseconds we need *1000 + xine_play( m_stream, 0, time*1000 ); } Frame Lib::currentFrame() { Frame frame; return frame; }; QString Lib::metaInfo( int number) { return xine_get_meta_info( m_stream, number ); } int Lib::error() { return xine_get_error( m_stream ); }; void Lib::handleXineEvent( const xine_event_t* t ) { if ( t->type == XINE_EVENT_UI_PLAYBACK_FINISHED ) { emit stopped(); } } void Lib::setShowVideo( bool video ) { diff --git a/noncore/multimedia/opieplayer2/lib.h b/noncore/multimedia/opieplayer2/lib.h index 191dbbd..38938a1 100644 --- a/noncore/multimedia/opieplayer2/lib.h +++ b/noncore/multimedia/opieplayer2/lib.h @@ -69,48 +69,49 @@ namespace XINE { int play( const QString& fileName, int startPos = 0, int start_time = 0 ); void stop() /*const*/; void pause()/*const*/; int speed() /*const*/; /** * Set the speed of the stream, if codec supports it * XINE_SPEED_PAUSE 0 * XINE_SPEED_SLOW_4 1 * XINE_SPEED_SLOW_2 2 * XINE_SPEED_NORMAL 4 * XINE_SPEED_FAST_2 8 *XINE_SPEED_FAST_4 16 */ void setSpeed( int speed = XINE_SPEED_PAUSE ); int status() /*const*/; int currentPosition()/*const*/; //in seconds int currentTime()/*const*/; + int length() /*const*/; bool isSeekable()/*const*/; /** * Whether or not to show video output */ void setShowVideo(bool video); /** * is we show video */ bool isShowingVideo() /*const*/; /** * */ void showVideoFullScreen( bool fullScreen ); /** * */ bool isVideoFullScreen()/*const*/ ; @@ -151,49 +152,51 @@ namespace XINE { */ void setScaling( bool ); /** * Set the Gamma value for video output * @param int the value between -100 and 100, 0 is original */ void setGamma( int ); /** * test */ Frame currentFrame()/*const*/; /** * Returns the error code * XINE_ERROR_NONE 0 * XINE_ERROR_NO_INPUT_PLUGIN 1 * XINE_ERROR_NO_DEMUXER_PLUGIN 2 * XINE_ERROR_DEMUXER_FAILED 3 */ int error() /*const*/; signals: + void stopped(); + private: int m_bytes_per_pixel; int m_length, m_pos, m_time; int m_major_version, m_minor_version, m_sub_version; bool m_video:1; XineVideoWidget *m_wid; xine_t *m_xine; xine_stream_t *m_stream; xine_cfg_entry_t *m_config; xine_vo_driver_t *m_videoOutput; xine_ao_driver_t* m_audioOutput; xine_event_queue_t *m_queue; void handleXineEvent( const xine_event_t* t ); void drawFrame( uint8_t* frame, int width, int height, int bytes ); // C -> C++ bridge for the event system static void xine_event_handler( void* user_data, const xine_event_t* t); static void xine_display_frame( void* user_data, uint8_t* frame , int width, int height, int bytes ); }; }; #endif diff --git a/noncore/multimedia/opieplayer2/nullvideo.c b/noncore/multimedia/opieplayer2/nullvideo.c index dcdfae6..b1f4811 100644 --- a/noncore/multimedia/opieplayer2/nullvideo.c +++ b/noncore/multimedia/opieplayer2/nullvideo.c @@ -418,110 +418,112 @@ static void null_overlay_blend ( xine_vo_driver_t *this_gen, vo_frame_t *frame_g } static int null_get_property( xine_vo_driver_t* self, int property ){ return 0; } static int null_set_property( xine_vo_driver_t* self, int property, int value ){ return value; } static void null_get_property_min_max( xine_vo_driver_t* self, int property, int *min, int *max ){ *max = 0; *min = 0; } static int null_gui_data_exchange( xine_vo_driver_t* self, int data_type, void *data ){ return 0; } -static void null_exit( xine_vo_driver_t* self ){ +static void null_dispose ( xine_vo_driver_t* self ){ null_driver_t* this = (null_driver_t*)self; free ( this ); } static int null_redraw_needed( xine_vo_driver_t* self ){ return 0; } xine_vo_driver_t* init_video_out_plugin( config_values_t* conf, void* video ){ null_driver_t *vo; vo = (null_driver_t*)malloc( sizeof(null_driver_t ) ); /* memset? */ memset(vo,0, sizeof(null_driver_t ) ); vo_scale_init (&vo->sc, 0, 0); vo->sc.gui_pixel_aspect = 1.0; vo->m_show_video = 0; // false vo->m_video_fullscreen = 0; vo->m_is_scaling = 0; vo->display_ratio = 1.0; vo->gui_width = 16; vo->gui_height = 8; vo->frameDis = NULL; /* install callback handlers*/ vo->vo_driver.get_capabilities = null_get_capabilities; vo->vo_driver.alloc_frame = null_alloc_frame; vo->vo_driver.update_frame_format = null_update_frame_format; vo->vo_driver.display_frame = null_display_frame; vo->vo_driver.overlay_blend = null_overlay_blend; vo->vo_driver.get_property = null_get_property; vo->vo_driver.set_property = null_set_property; vo->vo_driver.get_property_min_max = null_get_property_min_max; vo->vo_driver.gui_data_exchange = null_gui_data_exchange; - vo->vo_driver.exit = null_exit; + vo->vo_driver.dispose = null_dispose; vo->vo_driver.redraw_needed = null_redraw_needed; /* capabilities */ vo->m_capabilities = VO_CAP_COPIES_IMAGE | VO_CAP_YUY2 | VO_CAP_YV12; vo->yuv2rgb_factory = yuv2rgb_factory_init (MODE_16_RGB, vo->yuv2rgb_swap, vo->yuv2rgb_cmap); return ( xine_vo_driver_t*) vo; } +#if 0 static vo_info_t vo_info_null = { 5, - "null plugin", XINE_VISUAL_TYPE_FB }; vo_info_t *get_video_out_plugin_info(){ vo_info_null.description = _("xine video output plugin using null device"); return &vo_info_null; } +#endif + /* this is special for this device */ /** * We know that we will be controled by the XINE LIB++ */ /** * */ int null_is_showing_video( xine_vo_driver_t* self ){ null_driver_t* this = (null_driver_t*)self; return this->m_show_video; } void null_set_show_video( xine_vo_driver_t* self, int show ) { ((null_driver_t*)self)->m_show_video = show; } int null_is_fullscreen( xine_vo_driver_t* self ){ return ((null_driver_t*)self)->m_video_fullscreen; } void null_set_fullscreen( xine_vo_driver_t* self, int screen ){ ((null_driver_t*)self)->m_video_fullscreen = screen; } int null_is_scaling( xine_vo_driver_t* self ){ return ((null_driver_t*)self)->m_is_scaling; diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp index 31ac9dc..03176b3 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.cpp +++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp @@ -58,48 +58,50 @@ XineControl::XineControl( QObject *parent, const char *name ) disabledSuspendScreenSaver = FALSE; } XineControl::~XineControl() { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( disabledSuspendScreenSaver ) { disabledSuspendScreenSaver = FALSE; // Re-enable the suspend mode QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; } #endif delete libXine; } void XineControl::play( const QString& fileName ) { hasVideoChannel = FALSE; hasAudioChannel = FALSE; m_fileName = fileName; //qDebug("<<FILENAME: " + fileName + ">>>>"); if ( !libXine->play( fileName ) ) { QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); + // toggle stop so the the play button is reset + mediaPlayerState->setPlaying( false ); return; } mediaPlayerState->setPlaying( true ); char whichGui; // qDebug( QString( "libXine->hasVideo() return : %1 ").arg( libXine->hasVideo() ) ); if ( !libXine->hasVideo() ) { whichGui = 'a'; qDebug("HAS AUDIO"); libXine->setShowVideo( false ); hasAudioChannel = TRUE; } else { whichGui = 'v'; qDebug("HAS VIDEO"); libXine->setShowVideo( true ); hasVideoChannel = TRUE; } // determine if slider is shown mediaPlayerState->setIsStreaming( !libXine->isSeekable() ); // which gui (video / audio) mediaPlayerState->setView( whichGui ); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( !disabledSuspendScreenSaver ) { @@ -204,44 +206,53 @@ QString XineControl::getMetaInfo() { if ( !libXine->metaInfo( 1 ).isEmpty() ) { returnString += tr( " Comment: " + libXine->metaInfo( 1 ) ); } if ( !libXine->metaInfo( 2 ).isEmpty() ) { returnString += tr( " Artist: " + libXine->metaInfo( 2 ) ); } if ( !libXine->metaInfo( 3 ).isEmpty() ) { returnString += tr( " Genre: " + libXine->metaInfo( 3 ) ); } if ( !libXine->metaInfo( 4 ).isEmpty() ) { returnString += tr( " Album: " + libXine->metaInfo( 4 ) ); } if ( !libXine->metaInfo( 5 ).isEmpty() ) { returnString += tr( " Year: " + libXine->metaInfo( 5 ) ); } return returnString; } QString XineControl::getErrorCode() { + int errorCode = libXine->error(); + qDebug( QString("ERRORCODE: %1 ").arg(errorCode) ); + if ( errorCode == 1 ) { return tr( "No input plugin found for this media type" ); + } else if ( errorCode == 2 ) { + return tr( "No demux plugin found for this media type" ); + } else if ( errorCode == 3 ) { + return tr( "Demuxing failed for this media type" ); + } else if ( errorCode == 4 ) { + return tr( "Malformed MRL" ); } else { return tr( "Some other error" ); } } /** * Seek to a position in the track * @param second the second to jump to */ void XineControl::seekTo( long second ) { libXine->seekTo( (int)second ); } void XineControl::videoResized ( const QSize &s ) { libXine->resize( s ); } |