summaryrefslogtreecommitdiff
authorharlekin <harlekin>2002-11-10 13:40:33 (UTC)
committer harlekin <harlekin>2002-11-10 13:40:33 (UTC)
commitddfc3c3073216d6a9ef15b26e3836b9c3eb2085c (patch) (side-by-side diff)
tree5bef89c4dc116d09c1864778127ca9106e1f29ae
parentea3334042e9625c0f67c9a7293a482849f60e4e2 (diff)
downloadopie-ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c.zip
opie-ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c.tar.gz
opie-ddfc3c3073216d6a9ef15b26e3836b9c3eb2085c.tar.bz2
fixed seeking and further adaption to the new api
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp3
-rw-r--r--noncore/multimedia/opieplayer2/lib.h3
-rw-r--r--noncore/multimedia/opieplayer2/nullvideo.c8
-rw-r--r--noncore/multimedia/opieplayer2/xinecontrol.cpp11
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 );
}