00001 #ifndef VIDEOOUTPUTNULLVDPAU_H
00002 #define VIDEOOUTPUTNULLVDPAU_H
00003
00004
00005 #include "videooutbase.h"
00006 #include "mythrender_vdpau.h"
00007
00030 class VideoOutputNullVDPAU : public VideoOutput
00031 {
00032 public:
00033 static void GetRenderOptions(render_opts &opts);
00034 static QStringList GetAllowedRenderers(MythCodecID myth_codec_id);
00035 VideoOutputNullVDPAU();
00036 ~VideoOutputNullVDPAU();
00037
00038 virtual bool Init(int width, int height, float aspect, WId winid,
00039 const QRect &win_rect, MythCodecID codec_id);
00040 virtual bool InputChanged(const QSize &input_size,
00041 float aspect,
00042 MythCodecID av_codec_id,
00043 void *codec_private,
00044 bool &aspect_only);
00045 virtual bool SetupDeinterlace(bool, const QString &ovrf = "") { return false; }
00046 virtual bool SetDeinterlacingEnabled(bool) { return false; }
00047 virtual bool ApproveDeintFilter(const QString& filtername) const { return false; }
00048 virtual void ClearAfterSeek(void);
00049 virtual void ReleaseFrame(VideoFrame *frame);
00050 virtual void ProcessFrame(VideoFrame *frame, OSD *osd,
00051 FilterChain *filterList,
00052 const PIPMap &pipPlayers,
00053 FrameScanType scan) {;}
00054 virtual void PrepareFrame(VideoFrame *buffer,
00055 FrameScanType, OSD *osd) {;}
00056 virtual void Show(FrameScanType ) {;}
00057
00058 virtual void Zoom(ZoomDirection direction) {;}
00059 virtual void EmbedInWidget(const QRect &rect) {;}
00060 virtual void StopEmbedding(void) {;}
00061 virtual void DrawUnusedRects(bool sync = true) {;}
00062 virtual void UpdatePauseFrame(int64_t &disp_timecode) {;}
00063 virtual void MoveResizeWindow(QRect ) {;}
00064 virtual bool CanVisualise(AudioPlayer *audio, MythRender *render)
00065 { return false; }
00066 virtual bool SetupVisualisation(AudioPlayer *audio, MythRender *render,
00067 const QString &name) { return false; }
00068 virtual MythPainter *GetOSDPainter(void) { return NULL; }
00069 virtual void DrawSlice(VideoFrame *frame, int x, int y, int w, int h);
00070
00071 virtual VideoFrame *GetLastDecodedFrame(void);
00072 virtual VideoFrame *GetLastShownFrame(void);
00073 virtual void DoneDisplayingFrame(VideoFrame *frame);
00074
00075 private:
00076 void TearDown(void);
00077 bool InitRender(void);
00078 void DeleteRender(void);
00079 bool InitBuffers(void);
00080 void DeleteBuffers(void);
00081 bool InitShadowBuffers(void);
00082 void DeleteShadowBuffers(void);
00083 bool CreateVideoSurfaces(uint num);
00084 void DeleteVideoSurfaces(void);
00085 void ClaimVideoSurfaces(void);
00086 void DiscardFrame(VideoFrame*);
00087 void DiscardFrames(bool next_frame_keyframe);
00088 void CheckFrameStates(void);
00089 bool BufferSizeCheck(void);
00090
00091 private:
00092 MythRenderVDPAU *m_render;
00093 QMutex m_lock;
00094 uint m_decoder;
00095 int m_pix_fmt;
00096 uint m_decoder_buffer_size;
00097 QVector<uint> m_video_surfaces;
00098 bool m_checked_surface_ownership;
00099 VideoBuffers *m_shadowBuffers;
00100 QSize m_surfaceSize;
00101 };
00102
00103 #endif // VIDEOOUTPUTNULLVDPAU_H