Xregion.h
资源名称:X264CODEC.rar [点击查看]
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:6k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- /* $Xorg: region.h,v 1.4 2001/02/09 02:03:40 xorgcvs Exp $ */
- /************************************************************************
- Copyright 1987, 1998 The Open Group
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation.
- The above copyright notice and this permission notice 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 NONINFRINGEMENT. IN NO EVENT SHALL THE
- OPEN GROUP 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.
- Except as contained in this notice, the name of The Open Group shall not be
- used in advertising or otherwise to promote the sale, use or other dealings
- in this Software without prior written authorization from The Open Group.
- Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- All Rights Reserved
- Permission to use, copy, modify, and distribute this software and its
- documentation for any purpose and without fee is hereby granted,
- provided that the above copyright notice appear in all copies and that
- both that copyright notice and this permission notice appear in
- supporting documentation, and that the name of Digital not be
- used in advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
- DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- SOFTWARE.
- ************************************************************************/
- #ifndef _XREGION_H
- #define _XREGION_H
- typedef struct {
- short x1, x2, y1, y2;
- } Box, BOX, BoxRec, *BoxPtr;
- typedef struct {
- short x, y, width, height;
- }RECTANGLE, RectangleRec, *RectanglePtr;
- #define TRUE 1
- #define FALSE 0
- #define MAXSHORT 32767
- #define MINSHORT -MAXSHORT
- #ifndef MAX
- #define MAX(a,b) (((a) > (b)) ? (a) : (b))
- #endif
- #ifndef MIN
- #define MIN(a,b) (((a) < (b)) ? (a) : (b))
- #endif
- /*
- * clip region
- */
- typedef struct _XRegion {
- long size;
- long numRects;
- BOX *rects;
- BOX extents;
- } REGION;
- /* Xutil.h contains the declaration:
- * typedef struct _XRegion *Region;
- */
- /* 1 if two BOXs overlap.
- * 0 if two BOXs do not overlap.
- * Remember, x2 and y2 are not in the region
- */
- #define EXTENTCHECK(r1, r2)
- ((r1)->x2 > (r2)->x1 &&
- (r1)->x1 < (r2)->x2 &&
- (r1)->y2 > (r2)->y1 &&
- (r1)->y1 < (r2)->y2)
- /*
- * update region extents
- */
- #define EXTENTS(r,idRect){
- if((r)->x1 < (idRect)->extents.x1)
- (idRect)->extents.x1 = (r)->x1;
- if((r)->y1 < (idRect)->extents.y1)
- (idRect)->extents.y1 = (r)->y1;
- if((r)->x2 > (idRect)->extents.x2)
- (idRect)->extents.x2 = (r)->x2;
- if((r)->y2 > (idRect)->extents.y2)
- (idRect)->extents.y2 = (r)->y2;
- }
- /*
- * Check to see if there is enough memory in the present region.
- */
- #define MEMCHECK(reg, rect, firstrect){
- if ((reg)->numRects >= ((reg)->size - 1)){
- (firstrect) = (BOX *) Xrealloc
- ((char *)(firstrect), (unsigned) (2 * (sizeof(BOX)) * ((reg)->size)));
- if ((firstrect) == 0)
- return(0);
- (reg)->size *= 2;
- (rect) = &(firstrect)[(reg)->numRects];
- }
- }
- /* this routine checks to see if the previous rectangle is the same
- * or subsumes the new rectangle to add.
- */
- #define CHECK_PREVIOUS(Reg, R, Rx1, Ry1, Rx2, Ry2)
- (!(((Reg)->numRects > 0)&&
- ((R-1)->y1 == (Ry1)) &&
- ((R-1)->y2 == (Ry2)) &&
- ((R-1)->x1 <= (Rx1)) &&
- ((R-1)->x2 >= (Rx2))))
- /* add a rectangle to the given Region */
- #define ADDRECT(reg, r, rx1, ry1, rx2, ry2){
- if (((rx1) < (rx2)) && ((ry1) < (ry2)) &&
- CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){
- (r)->x1 = (rx1);
- (r)->y1 = (ry1);
- (r)->x2 = (rx2);
- (r)->y2 = (ry2);
- EXTENTS((r), (reg));
- (reg)->numRects++;
- (r)++;
- }
- }
- /* add a rectangle to the given Region */
- #define ADDRECTNOX(reg, r, rx1, ry1, rx2, ry2){
- if ((rx1 < rx2) && (ry1 < ry2) &&
- CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){
- (r)->x1 = (rx1);
- (r)->y1 = (ry1);
- (r)->x2 = (rx2);
- (r)->y2 = (ry2);
- (reg)->numRects++;
- (r)++;
- }
- }
- #define EMPTY_REGION(pReg) pReg->numRects = 0
- #define REGION_NOT_EMPTY(pReg) pReg->numRects
- #define INBOX(r, x, y)
- ( ( ((r).x2 > x)) &&
- ( ((r).x1 <= x)) &&
- ( ((r).y2 > y)) &&
- ( ((r).y1 <= y)) )
- /*
- * number of points to buffer before sending them off
- * to scanlines() : Must be an even number
- */
- #define NUMPTSTOBUFFER 200
- /*
- * used to allocate buffers for points and link
- * the buffers together
- */
- typedef struct _POINTBLOCK {
- XPoint pts[NUMPTSTOBUFFER];
- struct _POINTBLOCK *next;
- } POINTBLOCK;
- #endif