亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hwblt.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// Copyright (c) Samsung Electronics. Co. LTD. All rights reserved.

/*++

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:    hwblt.cpp

Abstract:   accelerated bitblt/rectangle for S3C6410 FIMGSE-2D

Functions:  HWBitBlt


Notes:


--*/

#include "precomp.h"

/**
*   @fn     void S3C6410Disp::HWBitBlt(GpeBltParms *pBltParms)
*   @brief  Check Further Optional processing. This is intemediate layer between display driver and 2D driver
*   @param  pBltParms Blit Parameter Information Structure
*   @sa     GPEBltParms
*   @note   currently support only rotation
*   @note   DMDO_0 = 0, DMDO_90 = 1, DMDO_180 = 2, DMDO_270 = 4
*/
BOOL S3C6410Disp::HWBitBlt(GPEBltParms *pBltParms, PSURFACE_DESCRIPTOR pdescSrcSurface, PSURFACE_DESCRIPTOR pdescDstSurface)
{
    PRECTL  prclSrc;     //< Src is already rotated.
    PRECTL  prclDst;     //< Dst is already rotated.
    RECT    rectlPhySrc;       //< If screen is rotated, this value has RotateRectl(prclSrc), physically addressed coordinate.
    RECT    rectlPhyDst;        //< If screen is rotated, this value has RotateRectl(prclDst), physically addressed coordinate.
    UINT    uiSrcWidth_0;       //< Source Rectangle's width as non-rotated logically.
    UINT    uiDstWidth_0;       //< Destination Rectangle's width as non-rotated logically.
    UINT    uiSrcHeight_0;      //< Source Rectangle's height as non-rotated logically.
    UINT    uiDstHeight_0;      //< Destination Rectangle's height as non-rotated logically.

    prclSrc = pBltParms->prclSrc;
    prclDst = pBltParms->prclDst;

    CopyRect(&rectlPhySrc, (LPRECT)prclSrc);
    CopyRect(&rectlPhyDst, (LPRECT)prclDst);

    int     iRotate = DMDO_0;

    RotateRectlBack(prclSrc);
    RotateRectlBack(prclDst);

    /// Get Logical Aspect.
    uiSrcWidth_0 = ABS(prclSrc->right - prclSrc->left);
    uiSrcHeight_0 = ABS(prclSrc->bottom - prclSrc->top);
    uiDstWidth_0 = ABS(prclDst->right - prclDst->left);
    uiDstHeight_0 = ABS(prclDst->bottom - prclDst->top);

    RotateRectl(prclSrc);
    RotateRectl(prclDst);
    

    /// Set Relative Rotation Degree
    iRotate = GetRelativeDegree(pBltParms->pSrc->Rotate(), pBltParms->pDst->Rotate());

#define SWAP(x,y, _type)  { _type i; i = x; x = y; y = i; }
    RETAILMSG(DISP_ZONE_TEMP,(TEXT("HWBitBlt Src(%d,%d)~(%d,%d):%d, Dst(%d,%d)~(%d,%d):%d, RelativeDegree:%d\n"),
        prclSrc->left, prclSrc->top, prclSrc->right, prclSrc->bottom, pBltParms->pSrc->Rotate(),
        prclDst->left, prclDst->top, prclDst->right, prclDst->bottom, pBltParms->pDst->Rotate(), iRotate));
        
    /// if Stretch option is set, run StretchBlt
    /// if StretchBlt is on, but source region and destination region are same. use BitBlt
    if( ((pBltParms->bltFlags & BLT_STRETCH) == BLT_STRETCH) 
        //< If it does not need to stretch or shrink. just using BitBlt is faster.
        && !(( uiSrcWidth_0 == uiDstWidth_0) && (uiSrcHeight_0 == uiDstHeight_0))
        )
    {
        if( (prclSrc->left < 0) || (prclSrc->right < 0) || (prclSrc->top < 0) || (prclSrc->bottom < 0)
            || (prclDst->left < 0) || (prclDst->right < 0) || (prclDst->top < 0) || (prclDst->bottom <0))
        {
            /// If rotated coodinate has negative value. we can't care about when stretching is need.
            /// So return false, then process it by SW
            return FALSE;
        }

        RECTL   t_rect;
        DWORD   dwSrcWidth;
        DWORD   dwSrcHeight;
        SURFACE_DESCRIPTOR descScratch;

        /// This is physical value == physically 0 degree;
        dwSrcWidth = ABS(prclSrc->right - prclSrc->left);
        dwSrcHeight  = ABS(prclSrc->bottom - prclSrc->top);

        /// Set Scratch Destination Region
        t_rect.left = 0;
        t_rect.top = 0;
        t_rect.right = dwSrcWidth;
        t_rect.bottom = dwSrcHeight;

        RETAILMSG(DISP_ZONE_TEMP,(TEXT("t_rect,realstretch: (%d,%d)~(%d,%d), R:%d\r\n"), 
            t_rect.left,t_rect.top,t_rect.right,t_rect.bottom, iRotate));
        DumpBltParms(pBltParms);           

        /// Set Source Surface Descriptor 
        m_oG2D->SetSrcSurface(pdescSrcSurface);

        /// Check whether XY flip or not, 
        ///if XY flip is requested, just Rotation 180 degree
        RotateRectlBack(prclDst);
        if( (prclDst->right < prclDst->left)  && (prclDst->bottom < prclDst->top) )
        {
            RotateRectl(prclDst);
            switch(iRotate)
            {
            case DMDO_0:
                iRotate = DMDO_180;
                break;
            case DMDO_90:
                iRotate = DMDO_270;
                break;
            case DMDO_180:
                iRotate = DMDO_0;
                break;
            case DMDO_270:
                iRotate = DMDO_90;
                break;
            }

            /// SWAP rect
            SWAP(prclDst->top, prclDst->bottom, LONG);
            SWAP(prclDst->left, prclDst->right, LONG);

#if (G2D_STRETCH_ALGORITHM==G2D_QUARTERED_ADJUSTING)
            /// Adjust Coordinate from (x1,y1)~(x2,y2) to (0,0)~(x2-x1,y2-y1)
            /// and Recalculate BaseAddress
            m_oG2D->TranslateCoordinateToZero(pdescDstSurface, prclDst, pBltParms->prclClip);
#endif
            /// Set Destination Surface to real Framebuffer Surface
            m_oG2D->SetDstSurface(pdescDstSurface);

            /// Set Destination Clipping window Rect
            if(pBltParms->prclClip)
            {
                m_oG2D->SetClipWindow(pBltParms->prclClip);
            }
            else
            {
                m_oG2D->SetClipWindow(prclDst);
            }

            EnterCriticalSection(&m_cs2D);
#if (G2D_STRETCH_ALGORITHM==G2D_QUARTERED_ADJUSTING)
            m_oG2D->StretchBlt_Bilinear( prclSrc, prclDst, m_oG2D->GetRotType(iRotate));
#else
            m_oG2D->StretchBlt( prclSrc, prclDst, m_oG2D->GetRotType(iRotate));
#endif
            LeaveCriticalSection(&m_cs2D);
            /// Recover rect
            SWAP(prclDst->top, prclDst->bottom, LONG);
            SWAP(prclDst->left, prclDst->right, LONG);

            //RotateRectl(prclDst);

            return TRUE;

        }
        RotateRectl(prclDst);


        /// Reconfigure HW to set destination framebuffer address as Scratch Framebuffer

        /// Check mirror case, and reset region rectangle
        /// Doing FlipBlt from Source to Sratch
        /// In mirror case, source region does not change.
        /// only destination's regions has reverse coordinate, this cannot be negative.
        if(iRotate == DMDO_90 || iRotate == DMDO_270)
        {
            /// back to logical value
            RotateRectlBack(prclDst);
            /// if left-right mirror case
            if(prclDst->right < prclDst->left)
            {
                RotateRectl(prclDst);
                /// Allocation Scratch Framebuffer for Flip Operation.
                DDGPESurf *ScratchSurf;

                AllocSurface(&ScratchSurf, dwSrcWidth, dwSrcHeight, pBltParms->pDst->Format(), EGPEFormatToEDDGPEPixelFormat[pBltParms->pDst->Format()], GPE_REQUIRE_VIDEO_MEMORY);
                if(ScratchSurf == NULL)
                {
                    RETAILMSG(DISP_ZONE_WARNING,(TEXT("Scratch Surface Allocation is failed. %d\n"), __LINE__));
#if 0//USE_PACSURF, To increase video memory is better than to use system memory as Video Surface
                    RETAILMSG(TRUE,(TEXT("try to allocate surface usign PA Surface\r\n")));
                    PACSurf *ScratchSurf;
#endif
                    RETAILMSG(DISP_ZONE_WARNING,(TEXT("Maybe There's no sufficient video memory. please increase video memory\r\n")));
                    RETAILMSG(DISP_ZONE_WARNING,(TEXT("try to redirect to SW Emulated Bitblt\r\n")));
                    return FALSE;
                }
                /// Set Scratch Surface Information
                descScratch.dwBaseaddr = (m_VideoMemoryPhysicalBase + ScratchSurf->OffsetInVideoMemory());
                RETAILMSG(DISP_ZONE_TEMP,(TEXT("ScratchBaseAddr : 0x%x\n"), descScratch.dwBaseaddr));
                descScratch.dwColorMode = GetHWColorFormat(pBltParms->pDst);
                descScratch.dwHoriRes = dwSrcWidth;
                descScratch.dwVertRes = dwSrcHeight;

                /// Set Destination Surface to Scratch Surface
                m_oG2D->SetDstSurface(&descScratch);
                /// Set Destination Clipping window Rect
                m_oG2D->SetClipWindow(&t_rect);
                /// Set Y-axis flip flag
                EnterCriticalSection(&m_cs2D);
                m_oG2D->FlipBlt( prclSrc, &t_rect,  FLIP_Y );
                LeaveCriticalSection(&m_cs2D);
                /// Y-axis mirror case. left-right inversion
                /// Set Source Address to Scratch Memory
                m_oG2D->SetSrcSurface(&descScratch);

                /// Swap top, left coordinate when 90 and 270
                RETAILMSG(DISP_ZONE_TEMP,(TEXT("S TBSWAP:%d,%d,%d,%d,%d,%d\n"),prclDst->left, prclDst->top, prclDst->right, prclDst->bottom, iRotate, m_oG2D->GetRotType(iRotate)));
                SWAP(prclDst->top, prclDst->bottom, LONG);

#if (G2D_STRETCH_ALGORITHM==G2D_QUARTERED_ADJUSTING)
                /// Adjust Coordinate from (x1,y1)~(x2,y2) to (0,0)~(x2-x1,y2-y1)
                /// and Recalculate BaseAddress
                m_oG2D->TranslateCoordinateToZero(pdescDstSurface, prclDst, pBltParms->prclClip);
#endif
                /// Set Destination Surface to real Framebuffer Surface
                m_oG2D->SetDstSurface(pdescDstSurface);

                /// Set Destination Clipping window Rect
                if(pBltParms->prclClip)
                {
                    m_oG2D->SetClipWindow(pBltParms->prclClip);
                }
                else
                {
                    m_oG2D->SetClipWindow(prclDst);
                }

                EnterCriticalSection(&m_cs2D);
                RETAILMSG(DISP_ZONE_TEMP,(TEXT("S TASWAP:%d,%d,%d,%d,%d,%d\n"),prclDst->left, prclDst->top, prclDst->right, prclDst->bottom, iRotate, m_oG2D->GetRotType(iRotate)));
#if (G2D_STRETCH_ALGORITHM==G2D_QUARTERED_ADJUSTING)
                m_oG2D->StretchBlt_Bilinear( &t_rect, prclDst, m_oG2D->GetRotType(iRotate));
#else
                m_oG2D->StretchBlt( &t_rect, prclDst, m_oG2D->GetRotType(iRotate));
#endif
                LeaveCriticalSection(&m_cs2D);
                /// recover left, right coordinate
                SWAP(prclDst->top, prclDst->bottom, LONG);

                /// Disallocate Scratch Surface
                delete ScratchSurf;

                RETAILMSG(DISP_ZONE_TEMP, (TEXT("Stretch Y-axis flip: R:%d\r\n"), pBltParms->pDst->Rotate()));

                return TRUE;
            }
            /// if bottom-up mirror case
            if(prclDst->bottom < prclDst->top)
            {
                RotateRectl(prclDst);
                /// Allocation Scratch Framebuffer for Flip Operation.
                DDGPESurf *ScratchSurf;
                AllocSurface(&ScratchSurf, dwSrcWidth, dwSrcHeight, pBltParms->pDst->Format(), EGPEFormatToEDDGPEPixelFormat[pBltParms->pDst->Format()], GPE_REQUIRE_VIDEO_MEMORY);
                if(ScratchSurf == NULL)
                {
                    RETAILMSG(DISP_ZONE_WARNING,(TEXT("Scratch Surface Allocation is failed. %d\n"), __LINE__));
#if 0//USE_PACSURF, To increase video memory is better than to use system memory as Video Surface
                    RETAILMSG(TRUE,(TEXT("try to allocate surface usign PA Surface\r\n")));
                    PACSurf *ScratchSurf;
#endif
                    RETAILMSG(DISP_ZONE_WARNING,(TEXT("Maybe There's no sufficient video memory. please increase video memory\r\n")));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人片一区二区三区| 欧美日韩aaaaaa| 国产一区欧美一区| 奇米色777欧美一区二区| 亚洲在线视频网站| 一区二区三区视频在线观看| 亚洲青青青在线视频| 亚洲欧洲www| 亚洲视频一区二区在线观看| 一区二区三区四区av| 亚洲永久精品大片| 免费看日韩a级影片| 狠狠色狠狠色综合| 成人免费黄色大片| 色综合久久六月婷婷中文字幕| 色综合天天综合给合国产| 日本精品视频一区二区| 欧美日韩精品二区第二页| 日韩精品综合一本久道在线视频| 欧美videossexotv100| 欧美激情艳妇裸体舞| 亚洲精品中文在线| 男女男精品视频网| 国产99久久久国产精品免费看| 99热99精品| 91精品福利在线一区二区三区 | 2017欧美狠狠色| 国产精品网站导航| 香蕉成人伊视频在线观看| 激情小说欧美图片| 色婷婷av一区二区| 精品久久人人做人人爽| 亚洲精品视频在线观看网站| 欧美aⅴ一区二区三区视频| av中文字幕在线不卡| 欧美一区二区视频在线观看2022| 久久久久久久国产精品影院| 亚洲一区二区成人在线观看| 国产精品一区久久久久| 欧美日韩国产天堂| 国产精品九色蝌蚪自拍| 日韩av电影免费观看高清完整版| jiyouzz国产精品久久| 日韩欧美国产一区二区在线播放 | 韩国精品主播一区二区在线观看 | 亚洲国产欧美日韩另类综合 | 亚洲午夜国产一区99re久久| 国产一区在线不卡| 欧美人与性动xxxx| 日韩理论在线观看| 国产精品资源站在线| 欧美一区二区三区四区五区| 国产精品高潮久久久久无| 看国产成人h片视频| 91极品视觉盛宴| 专区另类欧美日韩| 成人黄色国产精品网站大全在线免费观看 | 久草精品在线观看| 7777精品伊人久久久大香线蕉| 中文字幕一区三区| 成人少妇影院yyyy| 欧美国产激情一区二区三区蜜月| 美女脱光内衣内裤视频久久网站| 欧美调教femdomvk| 亚洲一区影音先锋| 色婷婷av一区二区三区大白胸 | 欧美成人video| 日本在线不卡一区| 4438x成人网最大色成网站| 亚洲综合一区在线| 欧美在线免费观看视频| 一区二区三区在线免费| 91麻豆swag| 亚洲影视在线观看| 欧美色综合网站| 日韩精彩视频在线观看| 欧美一区二区三区播放老司机| 天天色综合天天| 日韩一本二本av| 激情欧美日韩一区二区| 精品福利视频一区二区三区| 国产曰批免费观看久久久| 久久综合九色综合欧美就去吻| 国产伦精品一区二区三区免费迷 | 午夜精品久久久| 在线播放视频一区| 裸体健美xxxx欧美裸体表演| 2023国产精品| 成人18视频日本| 一区二区三区日韩欧美| 欧美久久久久久久久| 另类小说综合欧美亚洲| 国产片一区二区| 99riav久久精品riav| 亚洲福利一二三区| 精品日韩欧美在线| 成人激情免费电影网址| 一个色综合网站| 欧美刺激午夜性久久久久久久| 激情久久五月天| 亚洲视频免费观看| 7777精品伊人久久久大香线蕉的 | 美腿丝袜在线亚洲一区| 国产亚洲一区二区三区在线观看| 91影院在线免费观看| 日韩1区2区3区| 国产精品久久久久影院色老大| 色久优优欧美色久优优| 久久成人久久爱| 夜夜嗨av一区二区三区| 精品日韩欧美在线| 在线观看网站黄不卡| 精品一区二区在线免费观看| 亚洲乱码国产乱码精品精可以看| 欧美酷刑日本凌虐凌虐| 成人精品电影在线观看| 日本欧洲一区二区| 亚洲欧美韩国综合色| 精品国产百合女同互慰| 欧美影院午夜播放| 成人深夜视频在线观看| 精品一区二区在线视频| 午夜视黄欧洲亚洲| 国产精品久久久久久久久快鸭| 欧美精品久久天天躁| 色综合激情久久| 国产成人在线免费观看| 蜜桃av一区二区| 三级成人在线视频| 亚洲日韩欧美一区二区在线| 久久先锋资源网| 欧美一级欧美一级在线播放| 色菇凉天天综合网| www.视频一区| 粉嫩久久99精品久久久久久夜| 看电视剧不卡顿的网站| 天天影视涩香欲综合网| 亚洲激情校园春色| 成人免费在线视频| 国产精品另类一区| 亚洲国产精品精华液ab| 精品国产伦一区二区三区免费| 欧美剧情片在线观看| 欧美日韩在线免费视频| 色综合网色综合| 色偷偷成人一区二区三区91 | 国产成人免费在线观看不卡| 日韩av电影免费观看高清完整版 | 欧美成人vr18sexvr| 欧美高清dvd| 欧美日本国产一区| 91.xcao| 884aa四虎影成人精品一区| 欧美日韩免费一区二区三区视频| 欧美在线免费视屏| 3atv一区二区三区| 日韩女优毛片在线| 欧美精品一区二区不卡| 久久久国产一区二区三区四区小说| 精品国产一区二区国模嫣然| 亚洲精品一区二区精华| 欧美国产一区二区在线观看 | 欧美日韩一级视频| 欧美酷刑日本凌虐凌虐| 精品日韩一区二区三区免费视频| 日韩精品一区二区三区在线观看 | 成人18视频日本| 在线中文字幕不卡| 欧美精品亚洲二区| 2020国产成人综合网| 国产精品伦理一区二区| 亚洲一区二区三区中文字幕| 亚洲va国产va欧美va观看| 美女mm1313爽爽久久久蜜臀| 国产不卡视频在线播放| 一本久道久久综合中文字幕| 91精品国产综合久久久蜜臀图片| 日韩欧美国产精品| 国产精品久久久久桃色tv| 一区二区三区在线播| 另类中文字幕网| 96av麻豆蜜桃一区二区| 欧美一区二区三区视频在线观看| 久久网站最新地址| 亚洲最快最全在线视频| 久久精品99国产精品| 99麻豆久久久国产精品免费| 6080亚洲精品一区二区| 欧美国产禁国产网站cc| 日韩电影免费一区| 成人99免费视频| 日韩欧美国产电影| 亚洲女同女同女同女同女同69| 奇米精品一区二区三区四区| av福利精品导航| 日韩精品最新网址| 亚洲福利视频导航| 99久久婷婷国产精品综合| 欧美sm极限捆绑bd| 亚洲一区二区av在线|