You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
codeine/src/app/xineEngine.h

161 lines
4.0 KiB

// (C) 2005 Max Howell (max.howell@methylblue.com)
// See COPYING file for licensing information
#ifndef CODEINE_VIDEOWINDOW_H
#define CODEINE_VIDEOWINDOW_H
#include "../codeine.h"
#include <tqtimer.h>
#include <tqwidget.h>
#include <kurl.h>
#include <stdint.h>
#include <vector>
#include <xine.h>
typedef struct xine_s xine_t;
typedef struct xine_stream_s xine_stream_t;
typedef struct xine_video_port_s xine_video_port_t;
typedef struct xine_audio_port_s xine_audio_port_t;
typedef struct xine_event_queue_s xine_event_queue_t;
typedef struct xine_post_s xine_post_t;
typedef struct xine_osd_s xine_osd_t;
namespace Engine {
typedef std::vector<int16_t> Scope;
}
namespace Codeine
{
/** Functions declared here are defined in:
* xineEngine.cpp
* videoWindow.cpp
*/
class VideoWindow : public TQWidget
{
Q_OBJECT
enum PosTimeLength { Pos, Time, Length };
static VideoWindow *s_instance;
VideoWindow( const VideoWindow& ); //disable
VideoWindow &operator=( const VideoWindow& ); //disable
friend class TheStream;
friend VideoWindow* const engine();
friend VideoWindow* const videoWindow();
public:
VideoWindow( TQWidget *parent );
~VideoWindow();
bool init();
void exit();
bool load( const KURL &url );
bool play( uint = 0 );
uint position() const { return posTimeLength( Pos ); }
uint time() const { return posTimeLength( Time ); }
uint length() const { return posTimeLength( Length ); }
uint volume() const;
const Engine::Scope &scope();
Engine::State state() const;
operator xine_t*() const { return m_xine; }
operator xine_stream_t*() const { return m_stream; }
public slots:
void pause();
void record();
void seek( uint );
void stop();
///special slot, see implementation to facilitate understanding
void setStreamParameter( int );
signals:
void stateChanged( Engine::State );
void statusMessage( const TQString& );
void titleChanged( const TQString& );
void channelsChanged( const TQStringList& );
private:
static void xineEventListener( void*, const xine_event_t* );
uint posTimeLength( PosTimeLength ) const;
void showErrorMessage();
virtual void customEvent( TQCustomEvent* );
virtual void timerEvent( TQTimerEvent* );
void eject();
void announceStateChange() { emit stateChanged( state() ); }
xine_osd_t *m_osd;
xine_stream_t *m_stream;
xine_event_queue_t *m_eventQueue;
xine_video_port_t *m_videoPort;
xine_audio_port_t *m_audioPort;
xine_post_t *m_scope;
xine_t *m_xine;
int64_t m_current_vpts;
KURL m_url;
public:
TQString fileFilter() const;
public slots:
void toggleDVDMenu();
void showOSD( const TQString& );
/// Stuff to do with video and the video window/widget
private:
static void destSizeCallBack( void*, int, int, double, int*, int*, double* );
static void frameOutputCallBack( void*, int, int, double, int*, int*, int*, int*, double*, int*, int* );
void initVideo();
void cleanUpVideo();
public:
static const uint CURSOR_HIDE_TIMEOUT = 2000;
virtual TQSize sizeHint() const;
virtual TQSize minimumSizeHint() const;
void *x11Visual() const;
void becomePreferredSize();
TQImage captureFrame() const;
enum { ExposeEvent = 3000 };
public slots:
void resetZoom();
private slots:
void hideCursor();
private:
virtual void contextMenuEvent( TQContextMenuEvent* );
virtual bool event( TQEvent* );
virtual bool x11Event( XEvent* );
double m_displayRatio;
TQTimer m_timer;
};
//global function for general use by Codeine
//videoWindow() is const for Xlib-thread-safety reasons
inline VideoWindow* const videoWindow() { return VideoWindow::s_instance; }
inline VideoWindow* const engine() { return VideoWindow::s_instance; }
}
#endif