diff options
Diffstat (limited to 'src/sna/sna_video.h')
-rw-r--r-- | src/sna/sna_video.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/sna/sna_video.h b/src/sna/sna_video.h new file mode 100644 index 00000000..f66a6977 --- /dev/null +++ b/src/sna/sna_video.h @@ -0,0 +1,130 @@ +/*************************************************************************** + +Copyright 2000 Intel Corporation. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL INTEL, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +#ifndef SNA_VIDEO_H +#define SNA_VIDEO_H + +#include <xf86.h> +#include <xf86_OSproc.h> +#include <fourcc.h> + +#if defined(XvMCExtension) && defined(ENABLE_XVMC) +#define SNA_XVMC 1 +#endif + +struct sna_video { + int brightness; + int contrast; + int saturation; + xf86CrtcPtr desired_crtc; + + RegionRec clip; + + uint32_t gamma0; + uint32_t gamma1; + uint32_t gamma2; + uint32_t gamma3; + uint32_t gamma4; + uint32_t gamma5; + + int color_key; + + /** YUV data buffers */ + struct kgem_bo *old_buf[2]; + struct kgem_bo *buf; + + Bool textured; + Rotation rotation; + + int SyncToVblank; /* -1: auto, 0: off, 1: on */ +}; + +struct sna_video_frame { + struct kgem_bo *bo; + int id; + int width, height; + int pitch[2]; + int size; + uint32_t YBufOffset; + uint32_t UBufOffset; + uint32_t VBufOffset; +}; + +void sna_video_init(struct sna *sna, ScreenPtr screen); +XF86VideoAdaptorPtr sna_video_overlay_setup(struct sna *sna, + ScreenPtr screen); +XF86VideoAdaptorPtr sna_video_textured_setup(struct sna *sna, + ScreenPtr screen); + +#define FOURCC_XVMC (('C' << 24) + ('M' << 16) + ('V' << 8) + 'X') + +static inline int is_planar_fourcc(int id) +{ + switch (id) { + case FOURCC_YV12: + case FOURCC_I420: + case FOURCC_XVMC: + return 1; + case FOURCC_UYVY: + case FOURCC_YUY2: + default: + return 0; + } +} + +Bool +sna_video_clip_helper(ScrnInfoPtr scrn, + struct sna_video *adaptor_priv, + xf86CrtcPtr * crtc_ret, + BoxPtr dst, + short src_x, short src_y, + short drw_x, short drw_y, + short src_w, short src_h, + short drw_w, short drw_h, + int id, + int *top, int* left, int* npixels, int *nlines, + RegionPtr reg, INT32 width, INT32 height); + +void +sna_video_frame_init(struct sna *sna, + struct sna_video *video, + int id, short width, short height, + struct sna_video_frame *frame); + +Bool +sna_video_copy_data(struct sna *sna, + struct sna_video *video, + struct sna_video_frame *frame, + int top, int left, + int npixels, int nlines, + unsigned char *buf); + +void sna_video_frame_fini(struct sna *sna, + struct sna_video *video, + struct sna_video_frame *frame); +void sna_video_free_buffers(struct sna *sna, struct sna_video *video); + +#endif /* SNA_VIDEO_H */ |