⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bbp422.c

📁 linux嵌入式开发程序
💻 C
字号:

/*===========================================================================
        2D Graphics Library
        ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1993-2002
        LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
 ===========================================================================*/
#include "gl.h"#include "defhook.h"#define BitLen  16#define BitSft  4int_GL_bbputYUV422(GL_WP *gp){    long    doffs ;    int     sbitp,dbitp,words,lines ;    char    *sadr ;    sadr  = (char  *)gp->bitblt.soffs ;    sbitp = gp->bitblt.sbitp ;    doffs = gp->bitblt.doffs ;    dbitp = gp->bitblt.dbitp ;    lines = gp->bitblt.ty ;    if(gp->bitblt.tx<=0||lines<=0)        return GL_Ok ;    AdjAccAdr32(sadr,sbitp) ;    AdjAccOffs32(doffs,dbitp) ;    words = ((gp->bitblt.tx<<BitSft) + dbitp)>>5 ;    if((gp->bitblt.logic&GL_TRANS)==0){        if(sbitp==dbitp){            while(lines-->0){                register DWORD  *src ;                register DWORD  *dst ;                register DWORD  d, o ;                register int    tx ;                tx  = gp->bitblt.tx ;                src = (DWORD  *)sadr ;                dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ;                if(words>0){                    if(dbitp>0){                        d = *src ;                        o = *dst ;                        *dst =   ( d & 0x0000ff00 )                               | ( o & 0xff000000 )                               | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                        src++ ;                        dst++ ;                        tx-- ;                    }                    while(tx>=2){                        *dst++ = *src++ ;                        tx -= 2 ;                    }                }                if(tx>0){                    d = *src ;                    o = *dst ;                    *dst =   ( d & 0xff000000 )                           | ( o & 0x0000ff00 )                           | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                }                sadr = _AddAdr(sadr, gp->bitblt.slbytes) ;                doffs += gp->bitblt.dlbytes ;            }        } else {            while(lines-->0){                register DWORD  *src ;                register DWORD  *dst ;                register DWORD  d, o ;                register int    tx ;                tx  = gp->bitblt.tx ;                src = (DWORD  *)sadr ;                dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ;                d = src[0] ;                if(dbitp>0){                     o = *dst ;                     *dst =  ((d>>16) & 0x0000ff00 )                           | ( o & 0xff000000 )                           | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                    tx-- ;                    dst++ ;                }                while(tx>=2){                    o = src[1] ;                    src++ ;                    tx -= 2 ;                    *dst =  ((d&0x0000ff00)<<16)                          | ((o>>16) & 0x0000ff00)                          | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                    dst++ ;                    d = o ;                }                if(tx>0){                    o = *dst ;                    *dst =   (( d & 0x0000ff00 )<<16)                           | ( o & 0x0000ff00 )                           | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                }                sadr = _AddAdr(sadr, gp->bitblt.slbytes) ;                doffs += gp->bitblt.dlbytes ;            }        }    } else {        DWORD   color = gp->bitblt.bcolor ;        if(sbitp==dbitp){            while(lines-->0){                register DWORD  *src ;                register DWORD  *dst ;                register DWORD  d, o ;                register int    tx ;                tx  = gp->bitblt.tx ;                src = (DWORD  *)sadr ;                dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ;                if(words>0){                    if(dbitp>0){                        d = *src ;                        if(d!=color){                            o = *dst ;                            *dst =   ( d & 0x0000ff00 )                                   | ( o & 0xff000000 )                                   | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                        }                        src++ ;                        dst++ ;                        tx-- ;                    }                    while(tx>=2){                        d = *src++ ;                        if(d!=color)                            *dst = d ;                        dst++ ;                        tx -= 2 ;                    }                }                if(tx>0){                    d = *src ;                    if(d!=color){                        o    = *dst ;                        *dst =   ( d & 0xff000000 )                               | ( o & 0x0000ff00 )                               | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                    }                }                sadr   = _AddAdr(sadr, gp->bitblt.slbytes) ;                doffs += gp->bitblt.dlbytes ;            }        } else {            while(lines-->0){                register DWORD  *src ;                register DWORD  *dst ;                register DWORD  d, o ;                register int    tx ;                tx  = gp->bitblt.tx ;                src = (DWORD  *)sadr ;                dst = _AddAdr(gp->hwork.VRAMadr[gp->hwork.page][0],doffs) ;                d = src[0] ;                if(dbitp>0){                    if(d!=color){                        o = *dst ;                        *dst =  ((d>>16) & 0x0000ff00 )                               | ( o & 0xff000000 )                               | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                    }                    tx-- ;                    dst++ ;                }                while(tx>=2){                    o = src[1] ;                    src++ ;                    tx -= 2 ;                    if(d!=color&&o!=color){                        *dst =  ((d&0x0000ff00)<<16)                              | ((o>>16) & 0x0000ff00)                              | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                    } else                    if(d!=color||o!=color){                        register DWORD b = *dst ;                        if(d!=color){                            *dst =   ( ( d & 0x0000ff00 ) << 16 )                                   | (   b & 0x0000ff00 )                                   | ( ( ( (d&0x00ff00ff)+(b&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                        } else {                            *dst =   ( (o>>16) & 0x0000ff00 )                                   | (       b & 0xff000000 )                                   | ( ( ( (o&0x00ff00ff)+(b&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                        }                    }                    dst++ ;                    d = o ;                }                if(tx>0){                    if(d!=color){                        o = *dst ;                        *dst =   (( d & 0x0000ff00 )<<16)                               | (  o & 0x0000ff00 )                               | ( ( ( (d&0x00ff00ff)+(o&0x00ff00ff) )>>1)& 0x00ff00ff ) ;                    }                }                sadr = _AddAdr(sadr, gp->bitblt.slbytes) ;                doffs += gp->bitblt.dlbytes ;            }        }    }    return GL_Ok ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -