[PyQt] Trying to create SIP

Phil Thompson phil at riverbankcomputing.com
Tue Apr 23 09:07:46 BST 2013


On Tue, 23 Apr 2013 10:58:27 +0300, Tomas Neverdauskas <topazas at gmail.com>
wrote:
> Hi,
> 
> i'am trying to create python interface to QtAV project
> https://github.com/wang-bin/QtAV (AvPlayer.h). Currently wrote this sip
> file, but after executing got this "sip: syntax error" and no other hint
is
> provided.
> 
> Please help to parse this file, thank you.
> 
> %Module AVPlayer
> 
> %Import QtCore/QtCoremod.sip
> %Import QtGui/QtGuimod.sip
> 
> namespace QtAV {
> 
> %TypeHeaderCode
> #include <../src/QtAV/AVClock.h>
> #include <../src/QtAV/AVDemuxer.h>
> %End
> 
> class AudioOutput;
> class AudioThread;
> class VideoThread;
> class AudioDecoder;
> class VideoDecoder;
> class VideoRenderer;
> class AVClock;
> class AVDemuxThread;
> class VideoCapture;
> class OSDFilter;
> class AVPlayer : QObject
> {
> public:
>     explicit AVPlayer(QObject *parent = 0);
>     ~AVPlayer();
> 
>     //NOT const. This is the only way to access the clock.
>     AVClock* masterClock();
>     void setFile(const QString& path);
>  QString file() const;
>     bool load(const QString& path);
>     bool load();
>     bool isLoaded() const;
>     qreal duration() const; //This function may be removed in the
future.
>     /*
>      * default: [fmt: PNG, dir: capture, name: basename]
>      * replace the existing capture; return the replaced one
>      * set 0 will disable the capture
>      */
>     VideoCapture* setVideoCapture(VideoCapture* cap);
>     VideoCapture *videoCapture();
>     void setCaptureName(const QString& name);//TODO: remove. base name
>     void setCaptureSaveDir(const QString& dir); //TODO: remove
>     bool captureVideo();
>     OSDFilter* setOSDFilter(OSDFilter* osd);
>     OSDFilter* osdFilter();
>     bool play(const QString& path);
>  bool isPlaying() const;
>     bool isPaused() const;
>     //this will install the default EventFilter. To use customized
filter,
> register after this
>     VideoRenderer* setRenderer(VideoRenderer* renderer);
>     VideoRenderer* renderer();
>     AudioOutput* audio();
>     void setMute(bool mute);
>     bool isMute() const;
>     /*only 1 event filter is available. the previous one will be
removed.
> setPlayerEventFilter(0) will remove the event filter*/
>     void setPlayerEventFilter(QObject *obj);
> 
> signals:
>     void started();
>     void stopped();
> 
> public slots:
>     void pause(bool p);
>     void play(); //replay
>     void stop();
>     void playNextFrame();
>     void seek(qreal pos);
>     void seekForward();
>     void seekBackward();
>     void updateClock(qint64 msecs); //update AVClock's external clock
> 
> protected slots:
>     void resizeRenderer(const QSize& size);
> 
> public: //original was protected, but SIP complained that classes must
be
> public
>     bool loaded;
>     AVFormatContext *formatCtx; //changed when reading a packet
>     AVCodecContext *aCodecCtx; //set once and not change
>     AVCodecContext *vCodecCtx; //set once and not change
>     QString path;
>     QString capture_name;
>     QString capture_dir;
> 
>     //the following things are required and must be setted not null
>     AVDemuxer demuxer;
>     AVDemuxThread *demuxer_thread;
>     AVClock *clock;
>     VideoRenderer *_renderer; //list?
>     AudioOutput *_audio;
>     AudioDecoder *audio_dec;
>     VideoDecoder *video_dec;
>     AudioThread *audio_thread;
>     VideoThread *video_thread;
> 
>     //tODO: (un)register api
>     QObject *event_filter;
>     VideoCapture *video_capture;
>     OSDFilter *osd;
> };
> 
> } //namespace QtAV

Maybe a semi-colon after the last closing brace. The general approach is
to comment things out until it parses to isolate the line causing the
problem.

Phil


More information about the PyQt mailing list