在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在i.MX RT處理器上使用PXP實(shí)現(xiàn)縮放和旋轉(zhuǎn)組合操作

    在i.MX RT處理器上使用PXP實(shí)現(xiàn)縮放和旋轉(zhuǎn)組合操作

    作者:Jia Guo 時(shí)間:2025-02-25 來源:恩智浦MCU加油站 收藏

    本文主要探討如何使用實(shí)現(xiàn)縮放和旋轉(zhuǎn)組合操作,是NXP推出的一個(gè)2D,主要完成對圖像的數(shù)據(jù)格式轉(zhuǎn)換、固定角度旋轉(zhuǎn)(90°,180°,270°),任意比例縮放、混色,移位以及翻轉(zhuǎn)等功能。運(yùn)行平臺(tái)為i.MX RT1170/1160/1060/1050/1040。

    本文引用地址:http://www.biyoush.com/article/202502/467295.htm

    其功能結(jié)構(gòu)框如下圖所示:

    圖片

    其工作域有3個(gè):PS, AS以及OUTPUT。

    PS域和AS域是輸入域,如果不需要混色,就只需要PS域輸入就可以了。PS域的輸入圖像可以進(jìn)行縮放、顏色轉(zhuǎn)換以及旋轉(zhuǎn)等操作。

    本文主要討論一種特殊的情況,經(jīng)過PS域,先進(jìn)行縮放再進(jìn)行旋轉(zhuǎn),然后輸出。比如攝像頭輸入一個(gè)640(w)* 480(h)的圖片,經(jīng)過放大和旋轉(zhuǎn)后,輸出到一個(gè)720(w)*1280(h)的屏幕上。這個(gè)轉(zhuǎn)換過程如下圖所示:

    圖片

    為了實(shí)現(xiàn)這個(gè)操作,我們需要配置一個(gè)PS域的區(qū)域范圍,對于這種場景,PS域的范圍應(yīng)該配置為(0,0,1280-1,1280-1),這四個(gè)坐標(biāo)分別表示區(qū)域的左上角x,左上角y,右下角x,右下角y。上面的圖形在PS域中的位置如下圖所示:

    圖片

    這樣,通過把PS域的大小配置為1280*1280的正方形,才能保證圖像在放大和旋轉(zhuǎn)完的過程中,所有的輸入和輸出都在PS域的范圍內(nèi)。超過PS域的范圍,不保證里面的數(shù)據(jù)正確,這一點(diǎn)在配置PXP的時(shí)候非常重要。另外PXP的框圖結(jié)構(gòu)里面有兩個(gè)旋轉(zhuǎn)(Rotation)單元。對于要依次做縮放和旋轉(zhuǎn)的情況,需要使用PXP的第二個(gè)旋轉(zhuǎn)單元。

    下面我們從代碼層面看一看相關(guān)的配置:

    1.定義屏幕尺寸和原始圖像尺寸

    #define APP_PANEL_WIDTH  720
    #define APP_PANEL_HEIGHT 1280
    #define APP_IMG_SIZE_W 640
    #define APP_IMG_SIZE_H 480

    2. PS域的配置下面的代碼是PS輸入圖像的buffer的相關(guān)配置。

    這里重點(diǎn)講一下pitchBytes的概念。pitchBytes是用來指定一行圖像的字節(jié)數(shù),它等于一行數(shù)據(jù)的像素?cái)?shù)*每個(gè)像素的字節(jié)數(shù)。PXP是靠這個(gè)參數(shù)來作為輸入數(shù)據(jù)的換行邊界。

    const pxp_ps_buffer_config_tpsBufferConfig = {
    .pixelFormat = APP_PXP_PS_FORMAT,
    .swapByte    = false,
    .bufferAddr  = (uint32_t)s_psBufferPxp,  // PS input image buffer
    .bufferAddrU = 0U,
    .bufferAddrV = 0U,
    .pitchBytes  = APP_IMG_SIZE_W * APP_BPP,
    };

    配置PS區(qū)域,需要配置為配置為(0,0,1280-1,1280-1)。

    PXP_SetProcessSurfacePosition(
    APP_PXP,
    0,
    0,
    APP_PANEL_HEIGHT-1,  // 1280-1
    APP_PANEL_HEIGHT-1);// 1280-1

    3.配置輸出buffer

    這里需要注意,當(dāng)使用第二級(jí)的旋轉(zhuǎn)單元時(shí),我們配置的輸出區(qū)域的長和寬是旋轉(zhuǎn)之前的長度和寬度,這一點(diǎn)非常容易出錯(cuò)。而pitchBytes一般都會(huì)配成旋轉(zhuǎn)后的圖像寬度(像素?cái)?shù))* 每個(gè)像素的字節(jié)數(shù)。

    outputBufferConfig.pixelFormat    = APP_PXP_OUT_FORMAT;
    outputBufferConfig.interlacedMode = kPXP_OutputProgressive;
    outputBufferConfig.buffer0Addr    = (uint32_t)s_BufferLcd[0];
    outputBufferConfig.buffer1Addr    = 0U;
    outputBufferConfig.pitchBytes     = APP_PANEL_WIDTH * APP_BPP;
    outputBufferConfig.width          = APP_PANEL_HEIGHT; //1280;
    outputBufferConfig.height         = APP_PANEL_WIDTH;  //720;

    4.配置縮放比例和旋轉(zhuǎn)角度

    這里縮放比例是通過縮放前的長寬和縮放后的長寬來指定的,API內(nèi)部會(huì)自動(dòng)計(jì)算縮放系數(shù)。

    PXP_SetProcessSurfaceScaler(APP_PXP,
    APP_IMG_SIZE_W,
    APP_IMG_SIZE_H,
    APP_PANEL_HEIGHT,
    APP_PANEL_WIDTH);
    PXP_SetRotateConfig(APP_PXP,
    kPXP_RotateOutputBuffer,  // Use the 2nd rotation unit.
    kPXP_Rotate90,
    kPXP_FlipDisable);

    運(yùn)行結(jié)果如下,左邊是原始圖像,右邊是放大以及旋轉(zhuǎn)90°得到的圖像:

    圖片



    關(guān)鍵詞: PXP 圖形加速器

    評論


    技術(shù)專區(qū)

    關(guān)閉