00001 #ifndef VAAPICONTEXT_H
00002 #define VAAPICONTEXT_H
00003
00004 extern "C" {
00005 #include "libavcodec/vaapi.h"
00006 }
00007 #include "va/va_x11.h"
00008 #include "va/va_glx.h"
00009 #include "videocolourspace.h"
00010
00011 struct vaapi_surface
00012 {
00013 VASurfaceID m_id;
00014 };
00015
00016 class VAAPIDisplay;
00017 class OpenGLVideo;
00018
00019 enum VAAPIDisplayType
00020 {
00021 kVADisplayX11,
00022 kVADisplayGLX,
00023 };
00024
00025 class VAAPIContext
00026 {
00027 public:
00028 static bool IsFormatAccelerated(QSize size, MythCodecID codec,
00029 PixelFormat &pix_fmt);
00030 VAAPIContext(VAAPIDisplayType display_type, MythCodecID codec);
00031 ~VAAPIContext();
00032
00033 bool CreateDisplay(QSize size);
00034 bool CreateBuffers(void);
00035 void* GetVideoSurface(int i);
00036 uint8_t* GetSurfaceIDPointer(void* buf);
00037
00038 int GetNumBuffers(void) const { return m_numSurfaces; }
00039 PixelFormat GetPixelFormat(void) const { return m_pix_fmt; }
00040
00041
00042 bool CopySurfaceToFrame(VideoFrame *frame, const void *buf);
00043 bool InitImage(const void *buf);
00044
00045 bool CopySurfaceToTexture(const void* buf, uint texture,
00046 uint texture_type, FrameScanType scan);
00047 void* GetGLXSurface(uint texture, uint texture_type);
00048 void ClearGLXSurfaces(void);
00049
00050 bool InitDisplay(void);
00051 bool InitProfiles(void);
00052 bool InitBuffers(void);
00053 bool InitContext(void);
00054 void InitPictureAttributes(VideoColourSpace &colourspace);
00055 int SetPictureAttribute(PictureAttribute attribute, int newValue);
00056
00057 VAAPIDisplayType m_dispType;
00058 vaapi_context m_ctx;
00059 MythCodecID m_codec;
00060 QSize m_size;
00061 VAAPIDisplay *m_display;
00062 VAProfile m_vaProfile;
00063 VAEntrypoint m_vaEntrypoint;
00064 PixelFormat m_pix_fmt;
00065 int m_numSurfaces;
00066 VASurfaceID *m_surfaces;
00067 vaapi_surface *m_surfaceData;
00068 QHash<uint, void*> m_glxSurfaces;
00069 VADisplayAttribute* m_pictureAttributes;
00070 int m_pictureAttributeCount;
00071 int m_hueBase;
00072 VAImage m_image;
00073 };
00074
00075 #endif // VAAPICONTEXT_H