色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于MM32F5和MindSDK使用輕量級圖像解碼器TJpgDec

冬至子 ? 來源:靈動MM32 MCU ? 作者:靈動MM32 MCU ? 2023-11-03 15:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

TJpgDec簡介

TJpgDec是一個為小型嵌入式系統高度優化的創建JPEG圖像的解碼軟件。它工作時占用的內存非常低,以便它可以集成到微控芯片,如AVR, 8051, PIC, Z80, Cortex-M0等。不依賴于具體的硬件平臺,使用ANSI-C編寫,易于使用的操作模式,完全可重入的體系結構,非常小的內存占用(獨立于圖像尺寸的3KB SRAM。3.5-8.5KB的代碼空間)。輸出格式可以是縮放比例為1/1、1/2、1/4或1/8可選,像素格式可以是RGB888或RGB565。

TJpgDec組件是一個免費開放的軟件,可用于教育、科研和商業開發。用戶可以在包含TJpgDec的個人項目和商業產品中改寫和重新發布該組件。

TJpgDec組件在用戶的應用中僅需要調用2個API。

jd_prepare() - 準備解碼JPEG圖像

jd_prepare 分析JPEG數據并創建一個解碼對象用于隨后的解碼過程。

jd_prepare函數是JPEG解碼過程的第一階段。它接收用戶傳入的數據流(需要通過傳入的回調函數操作數據流),分析JPEG圖像和創建解碼參數表。函數成功后,會話準備好在jd_decomp函數解碼JPEG圖像。應用程序可以參考JPEG解碼對象中存儲的尺寸大小。這個信息將用于在后續的解碼階段配置輸出設備和參數。

JRESULT jd_prepare (
            JDEC* jdec,            /* Pointer to blank decompression object */
            UINT(*infunc)(JDEC*,BYTE*,UINT), /* Pointer to input function */
            void* work,            /* Pointer to work area */
            UINT sz_work,          /* Size of the work area */
            void* device           /* Device identifier for the session */
            );

輸入參數:

  • jdec - 輸出,一個空的JDEC結構體對象,初始化一個解碼對象。需要用戶先創建JPEC對象的內存,然后本函數在執行過程中會向其中填充有效信息,這個解碼對象也將用于后續的解碼操作。
  • infunc - 輸入,指定一個為解碼算法提供輸入數據的回調函數。實際上,這個方法也是關聯具體平臺的,不僅僅是提供一個讀數的方法,更確切是提供一個具體的數據流。這個infunc函數也是需要在具體平臺適配過程中需要用戶自行實現的。具體寫法可以看原作者給的應用說明,也可以參見本文中的基于具體微控制器平臺的實現。
  • work - 輸入,指定一個內存塊,給解碼器內部運行算法的工作空間。
  • sz_work - 輸入,指定work參數指定工作空間的 size,以字節為單位。TJpgDec至多需要3092字節的工作區域,這依賴于JPEG圖像的內置參數表。通常情況下是3092字節工作區域。
  • device - 輸入,指定用戶自定義的會話設備標識。它保存在解碼對象jdec的字段device中。它可以用于I/O函數去識別當前會話。當I/O device固定在project或者不需要這個功能,設置為NULL并忽略它。device參數可以作為回調函數中訪問綁定硬件的傳參。

返回值:

  • JDR_OK - 函數執行成功,且編碼對象是有效的。
  • JDR_INP - 一個錯誤發生在input函數,由于硬件錯誤或者流終止。
  • JDR_MEM1 - 工作空間不足解碼這個JPEG圖像。
  • JDR_MEM2 - 工作空間不足解碼這個JPEG圖像。可能更小。
  • JDR_PAR - 參數錯誤。傳入工作空間的指針為NULL。
  • JDR_FMT1 - 數據格式錯誤。JPEG數據損壞。
  • JDR_FMT2 - 格式正確,但不支持。也許是一個灰度圖像。
  • JDR_FMT3 - 不支持JPEG標準,也許是一個后續版本的JPEG圖像。

jd_decomp() - 執行解碼JPEG圖像

jd_decomp()函數解碼JPEG圖像并輸出RGB數據。

jd_decomp()是JPEG解碼過程的第二階段。它進一步執行解碼JPEG圖像的過程,并通過用戶定義的輸出函數輸出數據,但同時也繼續使用在jd_prepare()傳入的輸入數據流的函數。在它之后,解碼對象將不在有效。

在解碼時指定的比例因子,它將JPEG圖像按1/2、1/4或1/8比例縮放尺寸。例如,當解碼一個1024x768大小JPEG圖像在1/4比例,它將輸出256x192大小。相比不縮放,1/2和1/4的縮放由于求均值,解碼速度略有下降。但是1/8縮放相比不縮放是2-3倍的速度輸出,因為每個塊IDCT和求均值可以跳過,這一特點適合創建縮略圖。

JRESULT jd_decomp (
            JDEC* jdec,             /* Pointer to valid decompressor object */
            UINT(*outfunc)(JDEC*,void*,JRECT*), /* Pointer to output function */
            BYTE scale              /* Scaling factor */
            );

輸入參數:

  • jdec - 輸入,指定有效的解碼對象。其實就是之前在jd_prepare()函數中準備好的JDEC對象。
  • outfunc - 輸入,指定用戶定義的JPEG解碼過程輸出數據流的回調函數。jd_decomp()調用這個函數去輸出解碼JPEG圖像的RGB形式數據流。具體寫法可以看原作者給的應用說明,也可以參見本文中的基于具體微控制器平臺的實現。
  • scale - 輸入,指定輸出縮放值N。輸出圖像的縮小比例為1/2^N(N = 0 to 3)。當不使用縮放功能時(JD_USE_SCALE == 0),可以指定為0。

返回值

  • JDR_OK - 函數執行成功。
  • JDR_INTR - 解碼過程在輸出函數中斷。
  • JDR_INP - 一個錯誤發生在input函數,由于硬件錯誤或者流終止。
  • JDR_PAR - 參數錯誤。給定的縮放值無效。
  • JDR_FMT1 - 數據格式錯誤。JPEG數據損壞。

tjpgdcnf.h - 配置文件

早期版本的TjpgDec源碼中并沒有tjpgdcnf.h文件。我試著找了一下tjpgdec項目的changelog,沒有直接找到關于版本更新的詳情內容,但是遍歷了到目前為止tjpgd所有發布版本的軟件包,確定了tjpgdcnf.h首次出現的版本是2021年5月8日發布的R0.02版本。在這個文件中,更細化地提取了一些對TJpgDec軟件配置和裁剪的一些選項,在當前最新的R0.03版本中源碼如下(原作者非常貼心地注釋了可用的選項和對應的解釋):

/*----------------------------------------------*/
/* TJpgDec System Configurations R0.03          */
/*----------------------------------------------*/

#define    JD_SZBUF        512
/* 指定在輸入數據流中每次讀取的字節數,512、1024、2048等等均可。*/

#define JD_FORMAT        0
/* Specifies output pixel format.
/  0: RGB888 (24-bit/pix)
/  1: RGB565 (16-bit/pix)
/  2: Grayscale (8-bit/pix)
*/

#define    JD_USE_SCALE    1
/* Switches output descaling feature.
/  0: Disable
/  1: Enable
*/

#define JD_TBLCLIP        1
/* Use table conversion for saturation arithmetic. A bit faster, but increases 1 KB of code size.
/  0: Disable
/  1: Enable
*/

#define JD_FASTDECODE    0
/* Optimization level
/  0: Basic optimization. Suitable for 8/16-bit MCUs.
/  1: + 32-bit barrel shifter. Suitable for 32-bit MCUs.
/  2: + Table conversion for huffman decoding (wants 6 < < HUFF_BIT bytes of RAM)
*/

針對使用ARM Cortex-MC1處理器內核和FSMC驅動的16位并口屏幕的MM32F5微控制器,這里需要改寫:

#define JD_FORMAT     1 /* 1: RGB565 (16-bit/pix) */
#define JD_FASTDECODE 1 /* 1: + 32-bit barrel shifter. Suitable for 32-bit MCUs. */

注意,這里似乎還藏了一個彩蛋。同時支持RGB888、RGB565和灰度圖像,這意味著TJpgDec軟件內部的源碼內部包含了原始RGB888轉RGB565和灰度圖像的算式,這個在純輸出的GUI應用開發中講會用到,屆時可以直接復制驗證過的代碼片段,而不用我們再自行編寫調試啦。

關于TJpgDec的軟件許可證

這是一份包含在源代碼TJpgDec中的許可聲明。

/*----------------------------------------------------------------------------/
/ TJpgDec - Tiny JPEG Decompressor R0.xx                       (C)ChaN, 20xx
/-----------------------------------------------------------------------------/
/ The TJpgDec is a generic JPEG decompressor module for tiny embedded systems.
/ This is a free software that opened for education, research and commercial
/  developments under license policy of following terms.
/
/  Copyright (C) 20xx, ChaN, all right reserved.
/
/ * The TJpgDec module is a free software and there is NO WARRANTY.
/ * No restriction on use. You can use, modify and redistribute it for
/   personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
/ * Redistributions of source code must retain the above copyright notice.
/
/----------------------------------------------------------------------------*/

TJpgDec許可是BSD風格的,但存在一些差異。因為TJpgDec是嵌入式項目,對以二進制形式的分發,如嵌入式代碼,hex文件或二進制庫,未指定以增加其可用性。分發的文檔不強制包含關于tjpgdec及其授權文件。TJpgDec是基于GNU GPL兼容的項目。當有任何修改下重新分發,許可證也可以改為GNU GPL或BSD許可證。

應用接口解析

TJpgDec組件的移植過程僅需要實現兩個函數,輸入數據和輸出數據。但從嚴格意義上講,這兩個函數都只是以約定的方式將數據流傳入到TJpgDec組件,或者從TJpgDec組件中傳出到指定存儲空間,因為完全是內存到內存的操作,不涉及到任何與具體硬件平臺相關綁定關系,所以也算不上移植。甚至在原作者的用戶使用文檔中,也是以應用筆記(TJpgDec Application Note)作為文檔的名字,而不是移植指南。

原作者在《TJpgDec Module Application Note》中講述了在應用中使用TJpgDec組件的操作步驟。建議用戶先試著構建和運行原作者提供的示例程序。

解碼會話分為兩個階段。第一階段是分析JPEG圖像,第二階段是解碼。

  1. 初始化輸入流。(例如打開一個文件)
  2. 分配JPEG解碼對象和工作區域。
  3. 調用jd_prepare()指定輸入數據流,并執行分析和準備壓縮的JPEG圖像。
  4. 使用解碼對象中的圖像信息初始化輸出設備。
  5. 調用jd_decomp()指定輸出數據流,解碼JPEG圖像并輸出。

image.png

圖x 在應用中使用TJpgDec組件的調用關系圖

這是原作者提供的一段參考源碼,描述了如何使用TJpgDec模塊。

/*------------------------------------------------*/
/* TJpgDec Quick Evaluation Program for PCs       */
/*------------------------------------------------*/
#include < stdio.h >
#include < string.h >
#include "tjpgd.h"

/* 用戶定義設備標識 */
typedefstruct {
    FILE *fp;      /* 用于輸入函數的文件指針 */
    BYTE *fbuf;    /* 用于輸出函數的幀緩沖區的指針 */
    UINT wfbuf;    /* 幀緩沖區的圖像寬度[像素] */
} IODEV;

/*------------------------------*/
/*      用戶定義input funciton  */
/*------------------------------*/
UINT in_func (JDEC* jd, BYTE* buff, UINT nbyte)
{
    IODEV *dev = (IODEV*)jd- >device; /* Device identifier for the session (5th argument of jd_prepare function) */

    if (buff) {
        /* 從輸入流讀取一字節 */
        return (UINT)fread(buff, 1, nbyte, dev- >fp);
    } else {
        /* 從輸入流移除一字節 */
        return fseek(dev- >fp, nbyte, SEEK_CUR) ? 0 : nbyte;
    }
}

/*------------------------------*/
/*      用戶定義output funciton */
/*------------------------------*/
UINT out_func (JDEC* jd, void* bitmap, JRECT* rect)
{
    IODEV *dev = (IODEV*)jd- >device;
    BYTE *src, *dst;
    UINT y, bws, bwd;

    /* 輸出進度 */
    if (rect- >left == 0) {
        printf("r%lu%%", (rect- >top < < jd- >scale) * 100UL / jd- >height);
    }

    /* 拷貝解碼的RGB矩形范圍到幀緩沖區(假設RGB888配置) */
    src = (BYTE*)bitmap;
    dst = dev- >fbuf + 3 * (rect- >top * dev- >wfbuf + rect- >left);  /* 目標矩形的左上 */
    bws = 3 * (rect- >right - rect- >left + 1);     /* 源矩形的寬度[字節] */
    bwd = 3 * dev- >wfbuf;                         /* 幀緩沖區寬度[字節] */
    for (y = rect- >top; y <= rect- >bottom; y++) {
        memcpy(dst, src, bws);   /* 拷貝一行 */
        src += bws; dst += bwd;  /* 定位下一行 */
    }

    return1;    /* 繼續解碼 */
}

/*------------------------------*/
/*        主程序                */
/*------------------------------*/
int main (int argc, char* argv[])
{
    void *work;       /* 指向解碼工作區域 */
    JDEC jdec;        /* 解碼對象 */
    JRESULT res;      /* TJpgDec API的返回值 */
    IODEV devid;      /* 用戶定義設備標識 */

    /* 打開一個JPEG文件 */
    if (argc < 2) return-1;
    devid.fp = fopen(argv[1], "rb");
    if (!devid.fp) return-1;

    /* 分配一個用于TJpgDec的工作區域 */
    work = malloc(3500);

    /* 準備解碼 */
    res = jd_prepare(&jdec, in_func, work, 3500, &devid);
    if (res == JDR_OK) {
        /* 準備好解碼。圖像信息有效 */
        printf("Image dimensions: %u by %u. %u bytes used.n", jdec.width, jdec.height, 3100 - jdec.sz_pool);

        devid.fbuf = malloc(3 * jdec.width * jdec.height); /* 輸出圖像的幀緩沖區(假設RGB888配置) */
        devid.wfbuf = jdec.width;

        res = jd_decomp(&jdec, out_func, 0);   /* 開始1/1縮放解碼 */
        if (res == JDR_OK) {
            /* 解碼成功。你在這里已經解碼圖像到幀緩沖區 */
            printf("rOK  n");
        } else {
            printf("Failed to decompress: rc=%dn", res);
        }
        free(devid.fbuf);    /* 釋放幀緩沖區 */
    } else {
        printf("Failed to prepare: rc=%dn", res);
    }

    free(work);             /* 釋放工作區域 */
    fclose(devid.fp);       /* 關閉JPEG文件 */

    return res;
}

這里詳細說明兩個回調函數的寫法。

in_func() - 輸入數據流回調函數

用戶需要在輸入數據流的回調函數in_func()中讀取JPEG數據存入傳參指針buff中。在jd_prepare()函數中傳入數據流到TJpgDec模塊。

UINT in_func (
            JDEC* jdec,    /* Pointer to the decompression object */
            BYTE* buff,    /* Pointer to buffer to store the read data */
            UINT ndata     /* Number of bytes to read */
            );

輸入參數:

  • jdec - 輸入,當前服務的jdec對象的handler。通過這個handler可以訪問到當前服務的jdec對象的所有資源。
  • buff - 輸出,一塊內存區,從介質中讀取指定數量的字節數據后,存放到這塊內存區,交給調用者。但如果buff的值為NULL,就表示跳過ndata參數指定數量的數據。
  • ndata - 輸入,調用者希望從輸入數據流中讀到的字節數量,即buff的大小。或者當buff的值為NULL時,此處參數指定為需要在輸入數據流中跳過讀取的字節數量。

實際上,這里還有一個隱形的參數,即出現在tjpgdcnf.h文件中的JD_SZBUF,它約定的應該是每次從輸入流讀取的最大字節數量,即ndata的最大值。

返回值:

  • 返回實際讀取或移除的字節數。若返回0,jd_prepare()jd_decomp()函數將終止并返回JDR_INP

out_func() - 輸出數據流回調函數

用戶可指定解碼出來的像素輸出到具體的存儲區,這個存儲區可以是一塊內存,或者映射到顯存的地址空間。用戶需要在out_func()函數內部,在rect參數執行的矩形區域中填充bitmap參數指定的像素信息。

UINT out_func (
            JDEC* jdec,    /* Pointer to the decompression object */
            void* bitmap,  /* RGB bitmap to be output */
            JRECT* rect    /* Rectangular region to output */
            );

輸入參數:

  • jdec - 輸入,當前服務的jdec對象的handler。通過這個handler可以訪問到當前服務的jdec對象的所有資源。
  • bitmap - 像素數據流。是按照tjpgdcnf.h文件中JD_FORMAT選項指定的格式組織,可以是3字節表示的一個像素的RGB888格式,也可以是2字節表示一個像素的RGB565格式等。第一個像素是rect指定矩形區域的左上角,從左到右,從上到下,最后一個像素是右下角的位置。
  • rect - 輸入,執行顯示像素區域的矩形。JRECT類型的結構體中,有LeftRightTopBottom四個字段,指示當前解碼輸出的矩形區域。實際上,這個矩形的大小從1x1到16x16不等,取決于圖像的裁剪、縮放和采樣因子(JPEG信息)。

返回值:

  • 通常返回1,以便TJpgDec繼續解碼過程。當它返回0,jd_decomp函數終止并返回JDR_INTR

輸入數據流可能時常發生變化,因為要讀取不同的jpg圖像文件。輸出數據流也是在應用中根據需要變化的,只不過因為在大多數微控制器應用中,顯示設備通常只有一個,所以統一輸出到這個顯示設備對應的顯存中。有一些對于輸出體驗有要求的場景,需要輸出到特定的存儲空間,為了進行二次渲染,或者多緩沖區的應用,此時就需要在應用根據程序執行的情況動態切換輸出了區域了。

關于工作區和幀緩沖區

在應用程序中調用jd_prepare()函數時,需要為TJpgDec指定一塊工作區,作為TJpgDec在內部運行解碼算法的臨時空間。TJpgDec至少需要3100字節用于JPEG圖像,這取決于解碼JPEG圖像使用怎樣的參數。3100字節是在默認輸入緩存(JD_SZBUF == 512)下的最大內存需求,并隨JD_SZBUFJD_FASTDECODE的配置值變化。JD_SZBUF定義每次從輸入流中讀取多少字節。TJpgDec對齊每個讀請求緩沖區大小,512, 1024, 2048... 字節是從存儲設備讀取的理想大小。

在樣例代碼中,原作者使用了動態分配的內存作為工作區,這對于擁有海量存儲資源和完善內存管理機制的PC環境是合適的。但在資源受限的嵌入式系統平臺上,使用靜態內存會是更穩妥的選擇。

另外,樣例代碼中使用了幀緩沖區(devid結構體變量中的fbuf指定內存區,wfbuf指定寬度),在應用程序和out_func回調函數之間傳遞像素數據,但實際看起來有點莫名其妙。此處了解到以矩形方式傳送像素矩陣的模式之后,用戶也可以自行簡化代碼。

在MM32F5微控制器上應用

在MM32F5微控制器上適配TJpgDec時,我使用了FatFs文件系統作為JPEG圖像文件的來源,使用靜態內存作為工作區,簡化了對“幀緩沖區”的使用,并使用LCD模塊作為輸出設備。最終實現在微控制器系統中啟用JPEG圖像解碼器的功能。

在包含TJpgDec組件的plus-f5270_image_fatfs_tjpgdec_basic_mdk工程中,我將打開圖像文件并解碼的過程封裝成bool app_fs_display_jpg_file(char * filepath)函數,如此,在主循環中遍歷到文件系統中的jpg文件后,可以直接使用其文件路徑打開文件并顯示像素信息到LCD屏上。這個函數中,就使用到了靜態內存分配的工具區域app_tjpgdec_work_buff。從代碼中可以看出,代碼的內容被簡化了不少。

#define APP_TJPGDEC_WORK_BUFF_SIZE 3500
uint8_t app_tjpgdec_work_buff[APP_TJPGDEC_WORK_BUFF_SIZE];

/* display a jpg file with its full filepath. */
bool app_fs_display_jpg_file(char * filepath)
{
    JRESULT res;      /* Result code of TJpgDec API */
    JDEC jdec;        /* Decompression object */
    //void *work;       /* Pointer to the work area */
    //size_t sz_work = 3500; /* Size of work area */
    IODEV devid;      /* Session identifier */
    FRESULT fres;
    
    /* Initialize input stream */
    devid.fp = &app_fs_file;
    fres = f_open(devid.fp, filepath, FA_READ);
    if (fres != FR_OK)
    {
        return-1;
    }
    
    /* Prepare to decompress */
    //work = (void*)malloc(sz_work);
    //res = jd_prepare(&jdec, in_func, work, sz_work, &devid);
    res = jd_prepare(&jdec, in_func, app_tjpgdec_work_buff, APP_TJPGDEC_WORK_BUFF_SIZE, &devid);
    if (res == JDR_OK)
    {
        /* It is ready to dcompress and image info is available here */
        //printf("Image size is %u x %u.n%u bytes of work ares is used.n", jdec.width, jdec.height, sz_work - jdec.sz_pool);

        /* Initialize output device */
        //devid.fbuf = (uint8_t*)malloc(N_BPP * jdec.width * jdec.height); /* Create frame buffer for output image */
        //devid.wfbuf = jdec.width;

        res = jd_decomp(&jdec, out_func, 0);   /* Start to decompress with 1/1 scaling */
        if (res == JDR_OK)
        {
            /* Decompression succeeded. You have the decompressed image in the frame buffer here. */
            printf("rDecompression succeeded.n");
        } else {
            printf("jd_decomp() failed (rc=%d)n", res);
        }
        //free(devid.fbuf);    /* Discard frame buffer */
    }
    else
    {
        printf("jd_prepare() failed (rc=%d)n", res);
    }
    //free(work);             /* Discard work area */
    f_close(devid.fp);       /* Close the JPEG file */
    returntrue;
}

同時,在實現輸入輸出數據流的回調函數時,也有一些考究。

在實現輸入數據流的回調函數的過程中,由于使用了FatFs文件系統,其中很多類POSIX的接口同樣例代碼的行為并不完全一致,需要做一些轉接的工作。特別FatFs文件系統中的f_lseek()函數是從文件開始計算偏移,而不是像通用的f_seek()函數從當前位置算偏移,因此需要使用f_tell()函數做一個適配。

size_t in_func (    /* Returns number of bytes read (zero on error) */
    JDEC* jd,       /* Decompression object */
    uint8_t* buff,  /* Pointer to the read buffer (null to remove data) */
    size_t nbyte    /* Number of bytes to read/remove */
)
{
    IODEV *dev = (IODEV*)jd- >device;   /* Session identifier (5th argument of jd_prepare function) */
    UINT br;

    if (buff) /* Read data from imput stream */
    {
        //return fread(dev- >fp, buff, 1, nbyte, dev- >fp);
        return (FR_OK == f_read(dev- >fp, buff, nbyte, &br)) ? br : 0;
    }
    else/* Remove data from input stream */
    {
        //return f_seek(dev- >fp, nbyte, SEEK_CUR) ? 0 : nbyte;
        return (FR_OK == f_lseek(dev- >fp, f_tell(dev- >fp) + nbyte)) ? nbyte : 0;
    }
}

在實現輸出數據流的回調函數的過程中,可以直接對接到開發板上LCD屏的顯存中,直接顯示像素。

int out_func (      /* Returns 1 to continue, 0 to abort */
    JDEC* jd,       /* Decompression object */
    void* bitmap,   /* Bitmap data to be output */
    JRECT* rect     /* Rectangular region of output image */
)
{
    /* Progress indicator */
    if (rect- >left == 0)
    {
        printf("r%lu%%", (rect- >top < < jd- >scale) * 100UL / jd- >height);
    }
    
    /* 在LCD屏幕上顯示圖像信息. */
    LCD_FillWindow(rect- >left, rect- >top, rect- >right, rect- >bottom, (uint16_t *)bitmap);

    return1;    /* Continue to decompress */
}

Keil工程中編譯可執行文件,下載到plus-f5270開發板上,實物演示如圖x所示。

640.gif

圖x 在plus-f5270開發板上運行TJpgDec

Code Size (-0):

==============================================================================

    Total RO  Size (Code + RO Data)                45096 (  44.04kB)
    Total RW  Size (RW Data + ZI Data)             13032 (  12.73kB)
    Total ROM Size (Code + RO Data + RW Data)      45104 (  44.05kB)

==============================================================================

其中,SRAM占用量是比較少的,總共13032字節,其中系統棧占用4KB,系統堆占用4KB,工作空間占用3500字節,還帶了個FatFs文件系統,這已經算是非常經濟的用量了。

一點思考

從實際演示效果來看,移植的樣例工程能夠完成JPEG解碼功能,驗證了TJpgDec組件能夠正常工作,這是非常不錯的。但由于從SD卡讀數、解碼、刷屏這些個步驟都是一小段一小段執行的,因此實際顯示圖像刷屏的速度不是很快(估計受讀取SD卡過程的影響較大)。一種改進的策略,是將解碼得到的圖像片段搜集到一塊大內存中,然后集中刷屏,這樣視覺效果會好很多。解碼完之后純刷屏的速度很快,解碼之前雖然有等待,但當前屏幕上還在放映之前解碼的圖片,參觀者不會感到無趣。

plus-f5270開發板上的MM32F5270微控制器僅有128KB的SRAM,不夠存放一整張圖(480x320),但是可以存放1/4個屏幕的圖片數據(75KB),可以考慮將屏幕分成四塊小屏來用,每次刷一塊。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7981

    瀏覽量

    156582
  • 解碼器
    +關注

    關注

    9

    文章

    1191

    瀏覽量

    42142
  • RGB
    RGB
    +關注

    關注

    4

    文章

    810

    瀏覽量

    60205
  • 回調函數
    +關注

    關注

    0

    文章

    89

    瀏覽量

    11931
  • SRAM存儲器
    +關注

    關注

    0

    文章

    88

    瀏覽量

    14737
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    手工打造基于MM32F5微控制的MicroPython開發板

    集成(感謝同事Hao的出色工作),使我得以在MM32F5微控制上運行的MicroPython項目中,使用基于flash存儲芯片的LittleFS文件系統,替換掉基于SD卡的FatFS文件系統。經過剛剛過去兩天一夜的編碼和調試,終于大功告成!
    的頭像 發表于 06-16 10:57 ?1857次閱讀
    手工打造基于<b class='flag-5'>MM32F5</b>微控制<b class='flag-5'>器</b>的MicroPython開發板

    基于MM32F5微控制的FSMC接口外接SRAM存儲的用法

    MM32F5微控制基于Arm STAR-MC1微控制,最高主頻可達120MHz,集成了FPU單元和DSP擴展指令集,有不錯的算力。
    發表于 07-17 15:08 ?1959次閱讀
    基于<b class='flag-5'>MM32F5</b>微控制<b class='flag-5'>器</b>的FSMC接口外接SRAM存儲<b class='flag-5'>器</b>的用法

    應用AM3358,請問怎樣在硬件設計上外部連接解碼器芯片,實現對圖像數據的解碼

    本帖最后由 一只耳朵怪 于 2018-6-5 14:46 編輯 圖像數據由網口發送給AM3358,需要解碼,現在想通過外部連接解碼器芯片來實現,可是看了下手冊,不太清楚ARM由哪
    發表于 06-04 15:35

    10個輕量級框架

    這些輕量級框架使用HTML5和CSS3標準來幫助您快速開發跨平臺的Web移動應用和網站。
    發表于 07-17 08:25

    基于MM32F5270開發板對MindSDK進行使用測評

    1、MindSDK使用測評步驟  Plus-F5270,據靈動微電子市場總監王維介紹,MM32F5系列采用Armv8-M Mainline架構,全系配置安謀科技“星辰”STAR-MC1處理
    發表于 09-01 17:05

    高清解碼器的作用

    高清解碼器(xunwei)的主要作用在于接收前端高清編碼圖像或網絡攝像頭信號并解碼,然后通過自身的各種視頻輸出接口,如HDMI、DVI、SDI、VGA、BNC輸出顯示到顯示設備上。編碼
    的頭像 發表于 12-10 15:47 ?1.4w次閱讀
    高清<b class='flag-5'>解碼器</b>的作用

    標記圖像文件格式(TIFF)解碼器-下載生產代碼

    標記圖像文件格式(TIFF)解碼器-下載生產代碼
    發表于 03-23 13:30 ?9次下載
    標記<b class='flag-5'>圖像</b>文件格式(TIFF)<b class='flag-5'>解碼器</b>-下載生產代碼

    Blackfin下載產品代碼的位圖圖像文件(BMP)解碼器

    Blackfin下載產品代碼的位圖圖像文件(BMP)解碼器
    發表于 06-08 11:46 ?1次下載
    Blackfin下載產品代碼的位圖<b class='flag-5'>圖像</b>文件(BMP)<b class='flag-5'>解碼器</b>

    靈動微電子發布高性能MM32F5系列MCU產品

    MM32F5作為一個通用高性能的MCU平臺,對于不同的應用場景和項目需要,客戶可以從中選擇所需的功能接口。同時,靈動也提供不同封裝形式如64,100和144pin,以及-40~105℃的擴展工業級產品選項供客戶選擇。
    的頭像 發表于 04-15 14:18 ?2985次閱讀

    靈動微電子高端MCU產品MM32F5系列正式量產

    日前,上海靈動微電子股份有限公司(以下簡稱“靈動微電子”)宣布高端MCU產品MM32F5系列已正式量產。
    的頭像 發表于 06-17 09:32 ?2666次閱讀

    搭載安謀科技“星辰”STAR-MC1處理MM32F5系列MCU量產

    作為靈動微電子高端MCU系列的開局,MM32F5在內核性能和資源配置上都較之前產品有很大提升。MM32F5系列產品配置了以太網、USB 和雙FlexCAN 等豐富的通信接口以及多達14組UART、SPI 和I2C
    的頭像 發表于 06-17 09:29 ?1614次閱讀

    MM32F5 推廣彩頁:新內核,新架構,"星"平臺(中文版)

    MM32F5 推廣彩頁:新內核,新架構,"星"平臺(中文版)
    發表于 02-23 18:44 ?0次下載
    <b class='flag-5'>MM32F5</b> 推廣彩頁:新內核,新架構,"星"平臺(中文版)

    MM32F5 推廣彩頁:新內核,新架構,"星"平臺(英文版)

    MM32F5 推廣彩頁:新內核,新架構,"星"平臺(英文版)
    發表于 02-23 18:44 ?0次下載
    <b class='flag-5'>MM32F5</b> 推廣彩頁:新內核,新架構,"星"平臺(英文版)

    解碼器該怎么選?

    當一個監控項目中是有多臺錄像機的時候,每臺錄像機是可以接顯示來顯示圖像,但是!它只能顯示自己添加的攝像機圖像! * **解碼器** **是可以把任意一臺錄像機的
    的頭像 發表于 05-06 11:07 ?4907次閱讀

    MicroPython應用基礎-準備基于MM32F5的MicroPython開發板

    本文主要面向 **2023年全國大學生物聯網設計競賽安謀科技命題** ,使用星辰處理的靈動MM32F5微控制開發板,基于MicroPython開發應用系統。
    的頭像 發表于 10-19 18:27 ?2011次閱讀
    MicroPython應用基礎-準備基于<b class='flag-5'>MM32F5</b>的MicroPython開發板
    主站蜘蛛池模板: 免费中文字幕av | 少妇粉嫩小泬白浆流出 | 香蕉视频免费在线看 | 久久精品aⅴ无码中文字字幕重口 | 长河落日电视连续剧免费观看01 | 国产日韩欧美成人 | 中文字幕日韩亚洲 | 欧美一级二级三级视频 | 色噜噜狠狠色综合成人网 | 99男女国产精品免费视频 | 亚洲色图自拍 | 中国女人内谢69xxxxⅹ视频 | 三浦理惠子av在线播放 | 久久久久美女 | 国产精品手机视频 | 91精品一区二区三区蜜臀 | 欧美 日韩 国产 在线观看 | 美女视频黄a视频全免费观看 | 农村妇女愉情三级 | 天天爽夜夜爽夜夜爽精品 | 18禁美女裸体无遮挡网站 | 就去干成人网 | 国产伦久视频免费观看 视频 | 手机av在线不卡 | 国产精品久久久久久久久久久久午 | 国产主播福利在线 | 国产成人午夜精品5599 | 全部av―极品视觉盛宴 | 亚洲日韩一区精品射精 | 无套内射蜜桃小视频 | 91免费看国产 | 91黄色软件| 日日草夜夜操 | 免费精品99久久国产综合精品应用 | 久久久久久国产精品免费免费男同 | 51嘿嘿嘿国产精品伦理 | 亚洲一区精品二人人爽久久 | 亚洲区小说区激情区图片区 | 亚洲黄色一区二区三区 | 日韩wwww| 欧美成人黄 | 五级毛片 | 免费精品在线观看 | 欧美亚洲国产成人一区二区三区 | 欧美激情成人在线 | 免费人成在线观看网站品爱网 | 欧美网黄 | 毛片毛片毛片毛片毛片毛片毛片 | 少妇激情在线 | 91porn成人精品 | 国产肉丝袜在线观看 | 中文字幕人妻无码专区app | 18成人免费观看视频 | 亚洲小视频 | 日本疯狂做爰xxxⅹ高潮视频 | 中文字幕精品久久久久 | 免费精品一区二区三区第35 | 红猫大本营在线观看的 | 日韩最新中文字幕 | 老司机精品视频一区二区 | 午夜xxxx| 日韩欧美自拍 | 天堂mv在线mv免费mv香蕉 | 国产激情久久久久久 | 欧美精品在线免费 | 毛茸茸熟妇张开腿呻吟 | 青青艹在线观看 | 日本特黄特刺激一级猛片 | 肉欲性毛片交国产 | 四虎影视免费永久观看在线 | 影音先锋日韩精品 | 国产热の有码热の无码视频 | 老子午夜精品无码不卡 | 国产免费av一区 | 国产精品午夜无码av体验区 | 中国av一区二区三区 | 五月亚洲综合 | 国产成人精品日本亚洲专区61 | 日本中文在线视频 | 免费的很黄很污的视频 | 亚洲黄色免费观看 | 亚洲免费黄色网 | av手机天堂 | 成人a级黄色片 | 国产资源在线免费观看 | 国产aⅴ片 | 久久精品这里热有精品 | 午夜网站在线观看 | 国产精品对白刺激蜜臀av | 欧美一区2区三区4区贰佰公司 | av噜噜| 亚洲国产成人女毛片在线主播 | 天天综合视频 | 日本妇人成熟免费 | 一级肉体全黄裸片 | 欧美激情视频免费 | 91伦理视频 | 国产欠欠欠18一区二区 | av一级大片 | 国产女人40精品一区毛片视频 | 91精品国产乱码久久久久久张柏芝 | 亚洲一卡二卡在线观看 | 黄在线视频 | 国产一级做a爱片久久毛片a | 我想看一级黄色片 | 日本熟hd | 无码国产精品一区二区免费式直播 | 无码中文字幕色专区 | 日本在线视频www | 国产精品福利在线 | 国产日韩欧美中文字幕 | aⅴ一级片 | 亚洲天堂五月天 | 99在线观看精品视频 | 光棍影院av | 制服丝袜美腿一区二区 | 亚洲成a人片在线观看www | 亚洲狼人综合网 | 大桥未久av片| 依依综合网 | 国产丝袜精品视频 | 拨开少妇两片肥嫩的肉 | 成年人小视频 | 中文字幕av免费观看 | 欧美人妻精品一区二区三区 | 午夜国产精品入口 | 国产精品女同一区二区久久夜 | 国产人妖ts重口系列 | 亚洲а∨天堂久久精品2021 | 亚洲色欲综合一区二区三区 | 精品久久亚洲 | 中国精品妇女性猛交bbw | 亚洲欧美国产精品久久久久久久 | 中国国语毛片免费观看视频 | 国产精品一区二区久久久久 | 无码一区二区波多野结衣播放搜索 | 国产青草视频在线观看 | 97人人模人人爽人人喊电影 | 美女露隐私网站 | 亚洲精品无码专区在线在线播放 | 最新中文字幕免费 | 丰满人妻熟妇乱又伦精品 | 亚洲第一a在线观看网站 | 本田岬高潮一区二区三区 | 国产内射爽爽大片视频社区在线 | 国产一级揄自揄精品视频 | 丝袜美腿一区二区三区 | 搡国产老太xxx网站 搡老女人一区二区三区视频tv | 91精品毛片一区二区三区 | 国产精品久久久久aaaa | 国产91对白叫床清晰播放 | 国产av激情久久无码天堂 | 中国一级大黄大黄大色毛片 | 亚洲人在线 | 狠狠干欧美 | av片在线观看免费 | 欧美日韩一区在线观看 | 国产一区二区欧美日韩 | 另类在线视频 | 亚洲欧洲在线观看 | 欧美精品国产综合久久 | 国产成人精品白浆久久69 | 亚洲日本欧美日韩中文字幕 | 亚洲午夜一区 | 青青草伊人网 | 成年人免费大片 | 无码内射中文字幕岛国片 | 好吊妞视频这里有精品 | 亚洲色中色 | 欧美人与性动交ccoo | 国产一级黄色av | 91沈先生探花极品在线 | 亚洲综合欧美在线一区在线播放 | 日日摸天天做天天添天天欢 | 四川骚妇无套内射舔了更爽 | 国产高清久久久 | 婷婷俺来也 | 午夜精品在线免费观看 | 国产www在线观看 | 欧美三级图片 | 天天噜噜噜在线视频 | www.99日本精品片com | 91久草视频 | 国产热热| 国产色播av在线 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲性人人天天夜夜摸 | 亚洲精品乱码久久久久久 | 爱情岛论坛自拍亚洲品质极速福利 | 成人性生交大片免费看r视频 | h视频免费在线观看 | 亚洲欧美日韩偷拍 | 欧美性色黄大片在线观看 | 黄色毛片网 | 任你躁国产自任一区二区三区 | 欧美呦呦呦 | 日本黄色毛片 | 97在线免费观看 | 亚洲福利网址 | 日韩中出 | 国产妇女馒头高清泬20p多 | 男女做那个的全过程 | 国产成人精品日本亚洲 | 天天操天天操天天射 | 中韩无矿砖专区综合 | 亚洲激情视频网 | 美日韩在线视频 | 台湾性dvd性色av | 国产精品第一国产精品 | 伊人久久大香线蕉综合影院首页 | 欧美jizz18 | 三级a三级三级三级a十八发禁止 | 国产麻豆91 | 成人性生交大片免费看r链接 | 国产做a爱片久久毛片a片 | 日韩视频免费在线 | 中文不卡av | 国产交换配乱婬视频 | 69免费| 婷婷色五 | 久久男人av资源网站无码软件 | 久久av色 | 青青草.com| 久草在线新时代视觉体验 | 精品国产污污免费网站 | 又污又黄又无遮挡的网站 | 五月天激情综合网 | 97成人免费 | 无码137片内射在线影院 | 好男人社区资源 | 国产一区二区精品丝袜 | 久久亚洲私人国产精品 | 午夜视频在线观看一区 | 国产乱码久久久久久 | 亚洲日本va午夜在线电影 | 欧美成人午夜激情 | 香港三级在线视频 | 日本黄色xxxxx| 亚洲一区av无码少妇电影 | 国产999精品久久久 国产999精品久久久久久 | 一个人看的www日本高清视频 | 久久黄色视| 激情小说亚洲色图 | 亚洲国产成人精品女人久久 | 91偷拍网| 成人在线免费av | 亚洲国产精品毛片 | 久久久久久国产精品免费免费男同 | 精品视频 | 日本不卡高字幕在线2019 | 久久综合亚洲鲁鲁五月久久 | 国产一区二区三区视频 | 嫩草影院永久入口 | 在线视频亚洲欧美 | www91色com| 亚洲成a人v欧美综合天堂下载 | 国产高清小视频 | 亚洲成年人专区 | 91精品综合久久久久久五月天 | 欧美福利网 | 在线观看av免费 | 国产91精选 | 日本免费在线观看视频 | 91丨九色丨国产 | 欧美一区二区三区激情 | 国产jjizz一区二区三区视频 | 欧美亚洲日本国产 | 黑人巨大无码中文字幕无码 | 日韩一二三区视频 | 国产日产精品一区二区三区四区的观看方式 | 精品国产不卡一区二区三区 | 久久天堂影院 | 在线中文视频va | 色偷偷一区二区无码视频 | 99精品久久久中文字幕 | 国产18毛片| 亚洲五月六月 | 免费在线视频一区 | 国产chinesehd精品 | 国产一区二区视频在线 | 国产香蕉久久 | 免费成人av网址 | 潘金莲4级淫片aaaa | 香蕉一级片 | 色婷婷av一区二区三区大白胸 | 天天操夜夜拍 | 日韩成人一级片 | 国产尤物av尤物在线看 | 成人高潮片免费软件69视频 | 哭悲在线观看免费高清恐怖片段 | 欧美大片免费 | 国产精品久久久久婷婷 | 乱人伦人妻中文字幕无码 | 免费人成网站视频在线观看 | www久久爱白液流出h好爽 | 色污网站| 欧美性猛少妇xxxxx免费 | 成人免费乱码大片a毛片软件 | 久久91精品久久久久清纯 | 国产高潮好爽受不了了夜色 | 欧美激情精品久久久久久蜜臀 | 奇米四色777 | 中文字幕人妻无码系列第三区 | 性生活三级视频 | 欧美成a人片在线观看久 | 中文在线观看免费高清 | 日本xxxxl码在中国是几码 | 美国av一区二区 | 欧美噜噜噜 | 日韩avcom| 久久丫精品国产 | 中文毛片 | 欧美日韩中文国产一区发布 | 一级国产黄色片 | 国产一级在线播放 | 在线观看吃瓜av网站 | 老司机午夜影院 | 国产伦精品一区二区三区在线观看 | 国产精品中文字幕av | 中文字幕一区二区三区四区五区 | 免费观看成人av | 乱亲女秽乱长久久久 | 成人午夜一区二区 | 永久免费视频 国产 | 高h大肚孕期孕妇play | 狠狠人妻久久久久久综合蜜桃 | 91精品国产91久久久久久久久 | 国产精品久久久久久久久久精爆 | 欧美黑人xxxⅹ高潮交 | 午夜激情视频在线 | 国产精品盗摄!偷窥盗摄 | 影音先锋在线看 | 日日噜噜夜夜狠狠久久丁香五月 | 韩国久久精品 | 中文字幕视频在线 | 国产亚洲精品精品国产亚洲综合 | 国产jjizz一区二区三区视频 | 精产国品一二三产品99麻豆 | 秋霞影院av | 一级特黄aaa | 少妇大尺度裸体做爰原声 | 六姐妹免费在线观看 | 亚洲综合久久成人a片 | aaaaaa毛片| 无码专区一va亚洲v专区在线 | 成人做爰高潮片免费视频 | 韩国三级毛片 | 久久6视频| 四影虎影免费在线观看 | 亚洲国产极品 | 日日噜噜噜夜夜爽爽狠狠视频97 | 激情五月综合网 | 亚洲激情欧美 | 精品国产乱码久久久久久1区2区 | 中文字幕在线免费97 | www国产精品一区 | 377p粉嫩日本欧洲色噜噜 | 噜噜噜久久 | 国产侵犯亲女在线 | 精品久久久久久亚洲中文字幕 | 免费观看一级视频 | 情侣作爱视频网站 | 日韩欧美国产精品 | 欧美日本国产欧美日本韩国99 | 国产高清无密码一区二区三区 | 免费在线国产视频 | 麻豆一区二区三区精品视频 | 日日摸天天添天天添破 | 婷婷综合久久中文字幕蜜桃三电影 | 印度女人狂野牲交 | 一色桃子av一区二区 | 午夜av剧场 | 日中文字幕 | 国产成人精品视频ⅴa片软件竹菊 | 国内综合精品午夜久久资源 | 欧美日韩综合一区二区 | 玖玖玖在线观看 | 免费看日韩| 欧美精品videosexo极品 | 国产资源av | 99久久久久久99国产精品免 | 久久久爽爽爽美女图片 | 碰碰色 | 色综亚洲国产vv在线观看 | 爽爽影院免费观看 | 91在线短视频 | 少妇高潮21p| 国产嫖妓一区二区三区无码 | 理论片中文字幕在线观看 | 波多野结衣小视频 | 草草影院在线免费观看 | 免费国产黄网站在线观看可以下载 | 亚洲精品色在线网站 | аⅴ资源天堂资源库在线 | 日本精品毛片一区视频播 | 日本熟妇人妻xxxx | 高清欧美性猛交xxxx黑人猛交 | a级黄色片视频 | 农村少妇野战做爰全过程 | 久久久久久久蜜桃 | 特级毛片内射www无码 | 中文字幕亚洲中文字幕无码码 | 免费在线看污片 | 国产三级在线视频 一区二区三区 | 欧美黄色小说视频 | 成人羞羞国产免费 | 国产99久久久国产精品~~牛 | 国产crm系统91在线 | 国产精品国产对白熟妇 | 欧美 国产 综合 欧美 视频 | 中文字幕在线免费观看视频 | 国产女人与拘做受视频9 | 九七久久 | 东北老女人高潮大叫对白 | 亚洲综合色无码 | 岛国大片在线观看 | 国产在线拍偷自揄拍精品 | 国产在线不卡av | 中文字幕日韩在线视频 | 国产主播喷水 | 日本精品在线看 | 亚洲色图网站 | 一区视频免费观看 | 精品夜色国产国偷在线 | 99热2| 国产精品欧美激情 | 农村末发育av片四区五区 | 精品欧美一区二区精品久久久 | 国产黄色一区二区 | 国产鲁鲁视频在线观看免费 | 久草视频免费播放 | 理论片福利片 | 狠狠色噜噜狠狠米奇777 | 中文精品一区二区 | 日日av拍夜夜添久久免费 | 中文视频在线观看 | 国产黄色免费在线观看 | 性高湖久久久久久久久 | 国产裸体丰满白嫩大尺度尤物可乐 | 狠狠躁天天躁中文字幕 | 成人午夜短视频 | 日本丶国产丶欧美色综合 | 新呦u视频一区二区 | 精品国产一区二区三区性色av | 蜜桃91麻豆精品一二三区 | 国产强伦姧在线观看无码 | 毛片网站免费 | 免费网站看v片在线18禁无码 | 天天透天天操 | 国产精品视频免费播放 | 亚洲精品乱码一区二区三区 | 农村少妇一区二区三区四区五区 | 亚洲视频精品在线观看 | 免费a v网站 | 国产免费看黄 | 国产精品国产精品国产专区不蜜 | 老女人给我性启蒙 | 日本黄色大片网站 | 国产精品偷伦小说 | 国产高清在线a视频大全 | 日本熟妇色xxxxx欧美老妇 | 国产伦精品一区二区三区在线 | 国产第一福利 | 中文字幕一本 | 日韩一级成人 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 人人舔人人干 | 黄色三级毛片视频 | 日韩欧av | 3d成人动漫在线观看 | 美女国内精品自产拍在线播放 | 午夜在线免费视频 | 成人免费一区二区三区视频 | 久久91久久久久麻豆精品 | 在线免费激情视频 | 国产调教在线 | 日本熟妇大乳 | 国产无套精品一区二区三区 | 久久无码人妻丰满熟妇区毛片 | 午夜免费福利影院 | 粉嫩欧美一区二区三区 | 狠狠色视频 | 久久久精品视频在线观看 | 国产黄色录像片 | 亚洲最新av在线 | 日本视频在线免费观看 | 亚洲产国偷v产偷自拍网址 亚洲超丰满肉感bbw | 91精品久久久久久久久不口人 | 成人av网站在线播放 | 欧美婷婷六月丁香综合色 | 久久人人人 | 最新黄色av网址 | 最新极品jizzhd欧美 | 麻豆国产成人av高清在线 | 亚洲精品在线视频观看 | 亚洲6080yy久久无码产自国产 | 五姑娘影院在线观看免费 | 自拍偷拍亚洲区 | 日本在线视频二区 | 网站黄在线| 草草屁屁影院 | 全黄h全肉短篇禁乱最新章节 | 欧美一区成人 | 国产精品亚洲а∨天堂123bt | 青青青草视频 | 内射国产内射夫妻免费频道 | 久久国产精品网 | 特级毛片在线大全免费播放 | 极品美女一区二区三区 | 熟女人妇 成熟妇女系列视频 | 少妇激情在线 | 麻豆国产露脸在线观看 | 波多野结衣在线观看一区二区三区 | 91蜜桃婷婷狠狠久久综合9色 | 草逼视频网站 | 欧美一级淫| 在线国产片 | 日韩精品一区二区三区视频播放 | www啪| 天堂网www在线资源网 | 成人性视频网站 | 国产情侣激情自拍 | 性猛交xxxx免费看蜜桃 | 中文字幕亚洲无线码 | 欧美xxxx黑人xyx性爽 | 国产一区二区三区视频网站 | 九九九久久久精品 | 色妞色视频一区二区三区四区 | 精品久久免费观看 | 一级少妇片| 欧洲grand老妇人bbw | 欧美尹人 | 亚洲国产另类久久久精品性 | www.日韩高清| av中文字幕观看 | 天堂8在线天堂资源bt | 国产精品69久久久久999小说 | av小说天堂网 | 少妇人妻互换不带套 | 白嫩初高中害羞小美女 | 欧美肥老妇视频 | 久久亚洲网站 | 成年人的免费视频 | 开心五月激情综合婷婷 | 亚洲第一二三四区 | 久久成人久久 | 五月婷六月丁香狠狠躁狠狠爱 | www.男女 | 亚洲熟妇自偷自拍另欧美 | 亚洲一区二区免费看 | 99热2| 7777欧美日激情日韩精品 | 欧美私人情侣网站 | 亚洲天堂一| 国产人成在线 | 欧美福利视频在线观看 | 一本一本久久a久久精品综合不卡 | 在线a网站 | 一本色道久久99精品综合蜜臀 | 黑人3p波多野结衣在线观看 | 高清欧美性猛交xxxx黑人猛交 | 精品国产一区二区三区av片 | 无码aⅴ精品一区二区三区浪潮 | 不卡中文av | 婷婷丁香狼人久久大香线蕉 | 在线播放唐嫣毛片 | 久久久中文网 | 亚洲免费成人在线 | 日韩精品啪啪 | 狠狠躁日日躁夜夜躁2022麻豆 | 色视频一区二区三区 | 日韩成人在线免费视频 | 久操久操久操 | 亚洲系列中文字幕 | 亚欧在线免费观看 | 欧美中日韩免费观看网站 | 真实人妻互换毛片视频 | 精品国产二区三区 | 亚洲成a人片在线观看无码 97se亚洲精品一区 | 操bbbbb| 国产热99 | 成年人在线免费 | 制服丝袜在线看 | 香蕉成人伊视频在线观看 | 男女一边摸一边做爽视频 | 国产一区二区3区 | 毛片一二三区 | 97国产视频 | 日一日干一干 | 成人看 | 黄色av免费在线看 | 91欧美日韩| 亚洲国产精品91 | 在线观看www | 天天躁日日躁狠狠躁av麻豆 | 欧美天堂色 | 国产最新进精品视频 | 欧美人与物videos另类xxxxx | 亚洲国产婷婷综合在线精品 | 成熟了的熟妇毛茸茸 | 欧美精品在欧美一区二区少妇 | 成长快手短视频在线观看 | 欧美一区二区三区爱爱 | 乌克兰少妇xxxhd做受 | 色哟哟免费观看 | 亚洲一区二区图片 | 日本最新免费二区 | 好吊妞精品视频 | 4438五月天 | 高清国产一区二区三区 | 成人妇女淫片aaaa视频 | 狠狠躁天天躁夜夜添人人 | 欧美性视屏 | 四面虎影最新播放网址 | 精品亚洲一区二区三区在线播放 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品