久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

用C語(yǔ)言實(shí)現(xiàn)PNG/JPEG轉(zhuǎn)BMP:從解碼原理到工程實(shí)踐

用C語(yǔ)言實(shí)現(xiàn)PNG/JPEG轉(zhuǎn)BMP:從解碼原理到工程實(shí)踐 簡(jiǎn)介這是一份面向C語(yǔ)言學(xué)習(xí)者和圖像處理開(kāi)發(fā)者的圖片格式轉(zhuǎn)換工程圍繞PNG與JPEG轉(zhuǎn)BMP的核心任務(wù)同時(shí)涵蓋圖片縮放、旋轉(zhuǎn)等常見(jiàn)操作。工程基于VC6.0開(kāi)發(fā)包含完整C語(yǔ)言源碼、libpng與jpeglib庫(kù)文件、頭文件及可執(zhí)行程序壓縮包共243個(gè)文件約14.15MB目錄按源碼、庫(kù)、示例圖片和工程配置分類既有16張測(cè)試用PNG/JPG原圖也有轉(zhuǎn)換后的BMP結(jié)果及配套音頻素材便于直接運(yùn)行和對(duì)照驗(yàn)證。目前已有2646人學(xué)習(xí)下載。通過(guò)學(xué)習(xí)這套源碼可以掌握PNG的IHDR/IDAT塊解析、JPEG的DCT與量化解碼流程、BMP文件頭及像素?cái)?shù)據(jù)的寫入規(guī)則如4字節(jié)行對(duì)齊以及最近鄰插值、雙線性插值和仿射變換等圖像處理算法的C語(yǔ)言實(shí)現(xiàn)從解碼到編碼全流程均有代碼呈現(xiàn)。對(duì)于準(zhǔn)備課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)或想深入理解圖像編碼原理、文件I/O與內(nèi)存操作的開(kāi)發(fā)者這是一份可直接參考的完整實(shí)例。1. 用 C 語(yǔ)言實(shí)現(xiàn) PNG/JPEG 轉(zhuǎn) BMP為什么說(shuō)是件反直覺(jué)的苦差事圖片格式轉(zhuǎn)換這件事表面上是“讀文件、改個(gè)頭、寫文件”實(shí)際做起來(lái)才發(fā)現(xiàn) BMP 這個(gè)“最笨”的格式反而是照妖鏡。PNG 有濾波、有 zlib 壓縮、有 Adam7 隔行JPEG 有 Huffman 表、有量化矩陣、有 4:2:0 色度抽樣而 BMP 只認(rèn)原始像素?cái)?shù)組。把前面兩種格式解碼成原始 RGB 再交給 BMP等于把一個(gè)圖片格式轉(zhuǎn)換工具做成了“半個(gè)解碼器”。很多人在網(wǎng)上找現(xiàn)成的 C 語(yǔ)言轉(zhuǎn)換源碼包下載后一跑就花屏、偏色、錯(cuò)行根本不是代碼寫錯(cuò)而是對(duì)格式規(guī)范理解得不到位。這篇文章拿一份具體的轉(zhuǎn)換工程拆解來(lái)龍去脈從解碼管線到 BMP 落盤細(xì)節(jié)再到三類高頻踩坑記錄。適合嵌入式開(kāi)發(fā)者、圖像算法入門者以及所有想在 C 語(yǔ)言層面徹底搞懂圖片格式的人。新手能照步驟跑通熟手可以跳過(guò)基礎(chǔ)部分直接看邊界和參數(shù)坑。2. 拆開(kāi)這份轉(zhuǎn)換工程文件構(gòu)成與整體管線拿到一份號(hào)稱“C 語(yǔ)言實(shí)現(xiàn) PNG/JPEG 轉(zhuǎn) BMP”的資源第一件事不是打開(kāi) main.c而是把整個(gè)目錄結(jié)構(gòu)摸清。源碼包的質(zhì)量從文件組織方式就能看出一大半很多 GitHub 上隨手傳的工程只有一兩個(gè) .c 文件里面塞了上千行裸代碼真要去改一個(gè)參數(shù)要翻半天。這份工程屬于能直接動(dòng)手復(fù)現(xiàn)的類型各個(gè)模塊分得比較干凈下面逐個(gè)細(xì)說(shuō)。2.1 目錄結(jié)構(gòu)哪些文件是核心哪些是輔助先看整體組織典型的劃分方式是把解碼器、編碼器、公共工具、入口邏輯分開(kāi)。以下目錄結(jié)構(gòu)是工程里最常見(jiàn)、也最值得保留的一種組織方式converter/ ├── src/ │ ├── main.c # 入口解析命令行參數(shù)調(diào)度轉(zhuǎn)換流程 │ ├── png_decoder.c/h # PNG 解碼IDAT 解壓、濾波反解、顏色轉(zhuǎn)換 │ ├── jpeg_decoder.c/h # JPEG 解碼Huffman 解碼、反量化、逆 DCT │ ├── bmp_writer.c/h # BMP 編碼文件頭、信息頭、像素?cái)?shù)據(jù)落盤 │ └── common.c/h # 公共工具文件讀寫、內(nèi)存分配、錯(cuò)誤碼定義 ├── test/ │ ├── sample_png/ # 各種 color type 的 PNG 測(cè)試圖 │ ├── sample_jpeg/ # 各種抽樣方式的 JPEG 測(cè)試圖 │ └── verify.py # 像素級(jí)對(duì)比腳本 └── Makefile這里最關(guān)鍵的是 png_decoder 和 jpeg_decoder這兩個(gè)模塊決定了轉(zhuǎn)換質(zhì)量。main.c 里沒(méi)有放任何解碼邏輯只做參數(shù)解析和流程編排這種寫法值得借鑒。很多初學(xué)者寫的轉(zhuǎn)換工具把所有代碼堆在 main 函數(shù)里最后連自己都分不清哪一段是濾波反解、哪一段是顏色空間轉(zhuǎn)換。有幾個(gè)工程還帶了進(jìn)階擴(kuò)展比如 bmp_writer 里不只有 24 位真彩輸出還留了 8 位調(diào)色板模式的開(kāi)關(guān)這意味著能把 RGB888 量化成 256 色輸出。這個(gè)功能對(duì)「嵌入式 LCD 顯示」這個(gè)場(chǎng)景非常有用因?yàn)楹芏嗥聊恢挥?8 位或 16 位色深后面我會(huì)單獨(dú)講調(diào)色板部分怎么驗(yàn)證。2.2 從文件到像素轉(zhuǎn)換管線的三段式設(shè)計(jì)整個(gè)系統(tǒng)的核心管線分三段輸入解碼、像素處理、BMP 編碼。先看轉(zhuǎn)換流程圖這個(gè)圖在腦中的比寫在紙上的重要因?yàn)檎{(diào)試問(wèn)題時(shí)要靠它定位階段PNG 文件 → PNG 解碼器 → RGB888 像素緩沖 → BMP 編碼器 → BMP 文件 JPEG 文件 → JPEG 解碼器 → RGB888 像素緩沖 → BMP 編碼器 → BMP 文件為什么要統(tǒng)一成 RGB888 中間格式這是處理圖片格式轉(zhuǎn)換的常見(jiàn)做法BMP 只是最終包裝PNG 和 JPEG 解碼出來(lái)的數(shù)據(jù)統(tǒng)一轉(zhuǎn)成 RGB888中間層的代碼復(fù)用率最高。如果需要擴(kuò)展成輸出 PPM、TGA 等其他格式只需要再寫一個(gè)編碼器解碼部分完全不用動(dòng)??创a時(shí)優(yōu)先看數(shù)據(jù)流的走向。先打開(kāi) png_decoder.c從頭文件里的結(jié)構(gòu)體定義開(kāi)始看// 解碼輸出的統(tǒng)一像素緩沖結(jié)構(gòu) typedef struct { int width; // 圖像寬度像素為單位 int height; // 圖像高度像素為單位 int channels; // 通道數(shù)3 RGB4 RGBA unsigned char *data; // 像素?cái)?shù)據(jù)按行存儲(chǔ) } ImageBuffer; // PNG 關(guān)鍵信息結(jié)構(gòu)體 typedef struct { int bit_depth; // 位深8、16 等 int color_type; // 顏色類型0灰度2真彩3索引6真彩alpha int interlace_method; // 0非隔行1Adam7 隔行 int width; int height; } PNGInfo;參數(shù)說(shuō)明channels 字段非常關(guān)鍵——PNG 的 color type 為 6RGBA時(shí)解碼出來(lái)有 4 個(gè)通道但 BMP 通常落地為 3 通道。這個(gè)通道數(shù)變換要在像素處理階段完成而不是在解碼器里改原因是 alpha 通道的取舍策略丟棄還是預(yù)乘應(yīng)該由轉(zhuǎn)換策略決定而不是解碼器自己決定。整個(gè)管線的順序是PNG 解碼器負(fù)責(zé)把壓縮的 IDAT 數(shù)據(jù)還原成帶有濾波信息的原始掃描線然后逐行做濾波反解最后根據(jù) color type 轉(zhuǎn)成 RGB888。JPEG 解碼器則是從熵解碼開(kāi)始逐步過(guò)反量化、逆 DCT、顏色空間轉(zhuǎn)換。兩類解碼器輸出統(tǒng)一格式后BMP 編碼器只管落盤不需要知道數(shù)據(jù)是從 PNG 還是 JPEG 來(lái)的。3. PNG 轉(zhuǎn) BMP 的實(shí)現(xiàn)拆解從 IDAT 到像素?cái)?shù)組PNG 轉(zhuǎn) BMP 的關(guān)鍵路徑是解析文件頭、解壓 IDAT、處理濾波、轉(zhuǎn)換顏色類型。這里面的難點(diǎn)不在文件頭而在“解壓后怎么處理”。PNG 的像素?cái)?shù)據(jù)走 zlib 壓縮后并不是直接就是 RGB 數(shù)組每一行開(kāi)頭還帶了一個(gè)濾波類型字節(jié)。這一章把整個(gè)鏈路走一遍重點(diǎn)落在濾波反解和顏色轉(zhuǎn)換上。3.1 PNG 解碼的關(guān)鍵步驟簽名驗(yàn)證、IHDR 解析、IDAT 解壓PNG 文件開(kāi)頭是固定的 8 字節(jié)簽名0x89 P N G \r \n 0x1a \n。代碼里驗(yàn)證簽名的方式是int png_check_signature(const unsigned char *data, size_t size) { static const unsigned char sig[8] { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }; if (size 8) return -1; return memcmp(data, sig, 8) 0 ? 0 : -1; }簽名驗(yàn)證不通過(guò)就直接返回“不是 PNG 文件”的錯(cuò)誤碼。這個(gè)看似基礎(chǔ)的檢查實(shí)際能過(guò)濾掉很多無(wú)效輸入我在調(diào)試時(shí)遇到過(guò)把 JPEG 改名成 .png 傳進(jìn)來(lái)的情況沒(méi)有簽名檢查的話后面解碼會(huì)直接內(nèi)存越界。簽名之后是 IHDR 塊。IHDR 是第一個(gè)關(guān)鍵塊固定 13 字節(jié)數(shù)據(jù)長(zhǎng)度包含寬、高、位深、顏色類型、壓縮方法、濾波方法、隔行方法。解析方式和寫在紙上的格式規(guī)范完全對(duì)應(yīng)int parse_ihdr(const unsigned char *buf, PNGInfo *info) { info-width (buf[0] 24) | (buf[1] 16) | (buf[2] 8) | buf[3]; info-height (buf[4] 24) | (buf[5] 16) | (buf[6] 8) | buf[7]; info-bit_depth buf[8]; info-color_type buf[9]; // buf[10] 是壓縮方法PNG 規(guī)范里固定為 0 // buf[11] 是濾波方法PNG 規(guī)范里固定為 0 info-interlace_method buf[12]; return 0; }參數(shù)說(shuō)明寬高都是大端序存儲(chǔ)所以不能直接當(dāng)小端讀。很多轉(zhuǎn)換代碼在這個(gè)地方直接取 buf[0] 作為低字節(jié)遇到寬高大于 255 的圖就翻車。位深和顏色類型要組合起來(lái)判斷合法性位深為 8 時(shí)支持所有顏色類型位深為 16 時(shí)只支持灰度、真彩、真彩alpha——遇到不合法的組合直接拒絕不要試圖去“猜”。解壓 IDAT 是 PNG 解碼的性能瓶頸。zlib 解壓后的數(shù)據(jù)是“原始掃描線 濾波類型字節(jié)”交錯(cuò)的形式。解壓方式用 zlib 庫(kù)是最省事的但如果你要寫的是嵌入式環(huán)境下的轉(zhuǎn)換器用 miniz 是更常見(jiàn)的選擇——miniz 是單文件庫(kù)嵌入工程方便API 跟 zlib 兼容#include miniz.h int png_decompress_idat(const unsigned char *compressed, size_t comp_len, unsigned char **raw, size_t *raw_len) { // 用 miniz 的 tinfl_decompress_mem_to_heap 直接解到堆上 mz_ulong estimated comp_len * 4 1024; // 初始估算不夠會(huì)自動(dòng)增長(zhǎng) *raw (unsigned char *)tinfl_decompress_mem_to_heap(compressed, comp_len, (mz_ulong *)raw_len, 0); if (!*raw) return -1; return 0; }邏輯說(shuō)明這段代碼調(diào)tinfl_decompress_mem_to_heap一次性解出全部數(shù)據(jù)。估算大小不是精確值庫(kù)內(nèi)部會(huì)處理膨脹的情況但如果你的工程對(duì)內(nèi)存敏感可以改成用tinfl_decompress分塊解配合已知的原始大小分配合適緩沖。原始大小怎么算就是每行寬度×通道數(shù)×位深/8 1 個(gè)濾波字節(jié)乘以高度前提是知道 color type 對(duì)應(yīng)的通道數(shù)——這就是前面 PNGInfo 存在的意義。3.2 濾波反解的五種類型與逐行恢復(fù)算法IDAT 解壓后的數(shù)據(jù)不能直接當(dāng)像素用。每一行開(kāi)頭多了一個(gè)濾波類型字節(jié)而每一行的像素值是經(jīng)過(guò)濾波處理的差分值必須逐行反向處理。這就是 PNG 和 BMP 之間最本質(zhì)的一層差異BMP 存的是絕對(duì)像素值PNG 存的是“經(jīng)過(guò)濾波后的值”。濾波類型共有五種0 無(wú)濾波、1 左側(cè)差分、2 上方差分、3 平均、4 Paeth 預(yù)測(cè)?;謴?fù)算法的核心邏輯是逐字節(jié)重建int png_unfilter_line(unsigned char *line, unsigned char *prev_line, int bytes_per_pixel, int line_bytes, int filter_type) { int i; for (i 0; i line_bytes; i) { unsigned char raw line[i]; unsigned char left (i bytes_per_pixel) ? line[i - bytes_per_pixel] : 0; unsigned char up (prev_line) ? prev_line[i] : 0; unsigned char up_left (prev_line i bytes_per_pixel) ? prev_line[i - bytes_per_pixel] : 0; switch (filter_type) { case 0: // 無(wú)濾波直接使用不需要修正 break; case 1: // Sub: 原始值 左側(cè)值 line[i] raw left; break; case 2: // Up: 原始值 上方值 line[i] raw up; break; case 3: // Average: 原始值 (左 上) / 2 line[i] raw ((left up) 1); // 注意是除以 2 后向下取整 break; case 4: { // Paeth: 原始值 左/上/左上三者間的預(yù)測(cè)值 int p left up - up_left; int pa abs(p - left); int pb abs(p - up); int pc abs(p - up_left); unsigned char predictor; if (pa pb pa pc) predictor left; else if (pb pc) predictor up; else predictor up_left; line[i] raw predictor; break; } } } return 0; }邏輯說(shuō)明注意循環(huán)的順序必須從左到右逐字節(jié)處理。Sub 濾波里后面的字節(jié)依賴前面已經(jīng)恢復(fù)的字節(jié)如果先處理右邊就全錯(cuò)了。Up 和 Average 依賴上一行的對(duì)應(yīng)位置所以必須按行從上到下處理絕不能并行。Paeth 的預(yù)測(cè)值選擇規(guī)則是取左邊、上方、左上三者中與“左上-左上”預(yù)測(cè)值最接近的那個(gè)。參數(shù)說(shuō)明bytes_per_pixel不是固定值它取決于 color type——灰度 1 字節(jié)、真彩 3 字節(jié)、真彩alpha 4 字節(jié)。8 位索引色也是 1 字節(jié)。16 位深度時(shí)每個(gè)通道占 2 字節(jié)bytes_per_pixel 要翻倍。這個(gè)參數(shù)錯(cuò)了濾波反解出來(lái)的圖像會(huì)出現(xiàn)“像素錯(cuò)位 偏色”的混合癥狀這是最常見(jiàn)的翻車現(xiàn)場(chǎng)之一。濾波處理完后如果原圖是非隔行的此時(shí)數(shù)據(jù)已經(jīng)是完整的圖像像素。但很多測(cè)試圖用的是 Adam7 隔行編碼解出來(lái)的數(shù)據(jù)是 7 個(gè)不完整的子圖必須先合成再繼續(xù)。合成方式是按 Adam7 的 7 個(gè) pass把每個(gè) pass 的像素放到最終位置代碼里維護(hù)一個(gè) 8x8 的偏移表7 個(gè) pass 覆蓋 64 個(gè)位置。不少轉(zhuǎn)換器直接不支持隔行 PNG報(bào)一個(gè)“不支持的隔行模式”錯(cuò)誤就退出。從工程角度對(duì)不支持的功能直接報(bào)錯(cuò)比輸出花屏要好得多。3.3 顏色類型轉(zhuǎn)換灰度、索引色、RGBA 統(tǒng)一成 RGB888PNG 的 color type 為 2真彩時(shí)濾波后的數(shù)據(jù)就是 RGB888直接拷貝到 ImageBuffer 即可。但灰度type 0、索引色type 3、真彩alphatype 6都要額外處理。灰度最簡(jiǎn)單每個(gè)像素的 RGB灰度值。索引色要查 PLTE 塊先解析調(diào)色板// 解析 PLTE 塊最多 256 項(xiàng)每項(xiàng) 3 字節(jié) (R,G,B) int parse_plte(const unsigned char *data, size_t len, unsigned char palette[][3]) { if (len % 3 ! 0) return -1; int count len / 3; if (count 256) count 256; for (int i 0; i count; i) { palette[i][0] data[i * 3]; palette[i][1] data[i * 3 1]; palette[i][2] data[i * 3 2]; } return count; } // 索引色轉(zhuǎn) RGB888 void indexed_to_rgb(const unsigned char *src, unsigned char *dst, int pixel_count, const unsigned char palette[][3]) { for (int i 0; i pixel_count; i) { unsigned char idx src[i]; dst[i * 3] palette[idx][0]; dst[i * 3 1] palette[idx][1]; dst[i * 3 2] palette[idx][2]; } }RGBA 轉(zhuǎn) RGB 的處理方式在轉(zhuǎn)換策略上有分歧。直接丟棄 alpha 是最簡(jiǎn)單的做法但如果原圖帶有透明背景丟掉 alpha 后透明區(qū)域的 RGB 值可能是任意值常見(jiàn)是黑或白轉(zhuǎn)出來(lái)的 BMP 會(huì)有一個(gè)黑色或白色的底。處理時(shí)先看 PLTE 和 tRNS 塊有沒(méi)有指定透明色再看 alpha 通道的值至少要把 alpha0 的像素 RGB 值統(tǒng)一設(shè)置成白色后續(xù)如果要嵌到其他場(chǎng)景里再合成這樣做翻車概率小一些void rgba_to_rgb(const unsigned char *src, unsigned char *dst, int pixel_count) { for (int i 0; i pixel_count; i) { unsigned char r src[i * 4]; unsigned char g src[i * 4 1]; unsigned char b src[i * 4 2]; unsigned char a src[i * 4 3]; if (a 0) { // 全透明像素RGB 置為白色避免出現(xiàn)隨機(jī)黑點(diǎn) dst[i * 3] dst[i * 3 1] dst[i * 3 2] 0xFF; } else { dst[i * 3] r; dst[i * 3 1] g; dst[i * 3 2] b; } } }邏輯說(shuō)明嚴(yán)格來(lái)說(shuō)如果 alpha 是 0 到 255 之間的半透明值正確的做法是把 RGB 跟背景色做 alpha 混合。但大多數(shù)圖片格式轉(zhuǎn)換工具對(duì)半透明的策略就是“丟掉 alpha 信息保留未預(yù)乘的 RGB”這一點(diǎn)要在代碼注釋里寫明。半透明區(qū)域的 RGB 值在 PNG 里的定義是“未預(yù)乘的顏色”丟掉 alpha 后顏色會(huì)偏亮或偏暗這是 PNG 轉(zhuǎn) BMP 的一個(gè)固有信息損失不是 bug。4. JPEG 轉(zhuǎn) BMP 的實(shí)現(xiàn)拆解Huffman 解碼與 DCT 的完整鏈路JPEG 轉(zhuǎn) BMP 比 PNG 要復(fù)雜一個(gè)量級(jí)。PNG 的復(fù)雜度在線性濾波JPEG 的復(fù)雜度在熵解碼之后的非線性環(huán)節(jié)Huffman 解碼、差分 DC、Zigzag 掃描、反量化、逆 DCT、YCbCr 轉(zhuǎn) RGB、色度上采樣。任何一個(gè)環(huán)節(jié)錯(cuò)了輸出圖不是整體偏色就是出現(xiàn) 8x8 的塊狀噪聲。這一章不搞簡(jiǎn)化版按完整解碼鏈路走你可以對(duì)照自己手里的工程逐段檢查。4.1 從文件頭到量化表SOI、DQT、DHT 的解析順序JPEG 文件由段Segment組成。解析的基本模式是掃描標(biāo)記Marker根據(jù)標(biāo)記類型分發(fā)到不同的處理函數(shù)。以下是常見(jiàn)標(biāo)記的說(shuō)明標(biāo)記名稱說(shuō)明0xD8SOI文件起始固定出現(xiàn)在開(kāi)頭0xE0~0xEFAPPn應(yīng)用數(shù)據(jù)段常見(jiàn)為 JFIF 信息0xDBDQT定義量化表至少要有一個(gè)0xC0SOF0幀起始包含寬高等關(guān)鍵信息0xC4DHT定義 Huffman 表0xDASOS掃描起始圖像數(shù)據(jù)從這里開(kāi)始0xD9EOI文件結(jié)束JPEG 規(guī)定量化表和 Huffman 表必須先于 SOS 出現(xiàn)但 DHT 可以拆成多段分別定義。寫解析器時(shí)要注意不能假設(shè)所有表在一個(gè)段里就給齊了。解碼器的狀態(tài)機(jī)按“讀標(biāo)記→讀段長(zhǎng)→分發(fā)”循環(huán)這是整個(gè) JPEG 解碼器的基礎(chǔ)骨架。量化表的解析要注意的一個(gè)細(xì)節(jié)是表 ID 和精度打包在一個(gè)字節(jié)里。高 4 位是精度08 位116 位低 4 位是表 ID。解碼時(shí)要分別取出來(lái)int parse_dqt(const unsigned char *buf, int len, QuantTable tables[4]) { int offset 0; while (offset len) { int pq buf[offset] 4; // 精度08bit116bit int tq buf[offset] 0x0F; // 表 ID0~3 offset; if (pq 0) { for (int i 0; i 64; i) { tables[tq].values[i] buf[offset i]; } offset 64; } else { // 16 位量化表每個(gè)值占 2 字節(jié)大端序 for (int i 0; i 64; i) { tables[tq].values[i] (buf[offset i * 2] 8) | buf[offset i * 2 1]; } offset 128; } } return 0; }參數(shù)說(shuō)明JPEG 量化表是自然序而非 Zigzag 序在反量化之前要先把系數(shù)恢復(fù)到 8x8 的自然位置。這個(gè)問(wèn)題我在初寫時(shí)踩過(guò)不熟悉編碼規(guī)范的話容易直接把量化表當(dāng) Zigzag 序用行頻和列頻就顛倒了。解決方式是在反量化前重排 Zigzag 序。4.2 熵解碼與逆 DCTDC 差分累積、Zigzag 重排、IDCT 公式JPEG 的核心是離散余弦變換DCT。編碼時(shí)把圖像分成 8x8 塊每個(gè)塊做 DCT 變換得到 64 個(gè)頻域系數(shù)再對(duì)系數(shù)量化和熵編碼。解碼時(shí)流程倒過(guò)來(lái)先熵解碼得到 64 個(gè)系數(shù)然后反量化再做逆 DCT 得到像素塊。這里的系數(shù)排列是 Zigzag 序做 IDCT 前要重排static const unsigned char zigzag[64] { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63 }; // 反量化 Zigzag 重排 void dequantize_block(const int *coeff_zz, const QuantTable *qtable, int coeff_natural[64]) { for (int i 0; i 64; i) { int natural_idx zigzag[i]; coeff_natural[zigzag[i]] coeff_zz[i] * qtable-values[zigzag[i]]; } }邏輯說(shuō)明coeff_zz是從熵解碼器出來(lái)的系數(shù)按 Zigzag 序號(hào)排列重排到自然序后行號(hào) idx / 8列號(hào) idx % 8這個(gè)順序才能喂給逆 DCT 函數(shù)。DC 系數(shù)是差分編碼的——當(dāng)前塊的 DC 值要加上上一個(gè)塊的值才是真正的 DC。這是 JPEG 解碼器和 PNG 濾波反解中“逐行必須串行”相似的約束但是按塊串行int prev_dc[4] {0, 0, 0, 0}; // 最多 4 個(gè)分量 // 每處理完一個(gè)塊后 prev_dc[component] diff_dc;這個(gè) prev_dc 數(shù)組要按分量分開(kāi)維護(hù)不能用一個(gè)全局變量。Y、Cb、Cr 各自的 DC 預(yù)測(cè)器是獨(dú)立的混在一起會(huì)出現(xiàn)深色圖像上出現(xiàn)橫向漸變的條紋。逆 DCT 的整數(shù)實(shí)現(xiàn)有很多種浮點(diǎn)版本最簡(jiǎn)單也最不容易出錯(cuò)。如果性能有要求可以用 AAN 整數(shù)近似算法但精度不如浮點(diǎn)void idct_8x8(const int block[64], unsigned char out[64]) { double tmp[64]; for (int u 0; u 8; u) { for (int v 0; v 8; v) { double sum 0.0; for (int x 0; x 8; x) { for (int y 0; y 8; y) { double cu (x 0) ? 0.7071067811865476 : 1.0; double cv (y 0) ? 0.7071067811865476 : 1.0; sum block[x * 8 y] * cu * cv * cos((2 * x 1) * u * M_PI / 16.0) * cos((2 * y 1) * v * M_PI / 16.0); } } tmp[u * 8 v] 0.25 * sum; } } for (int i 0; i 64; i) { int val (int)(tmp[i] 128.5); out[i] (unsigned char)(val 0 ? 0 : (val 255 ? 255 : val)); } }邏輯說(shuō)明這個(gè)雙重循環(huán)沒(méi)有做任何優(yōu)化但正確性有保證。輸出要加 128 的偏移量因?yàn)?DCT 變換假設(shè)輸入范圍是 [-128, 127]輸出要轉(zhuǎn)回 [0, 255]。0.5是做四舍五入而不是截?cái)嗖患拥脑挄?huì)出現(xiàn)整體偏暗的一致性問(wèn)題。4.3 色度抽樣與顏色空間4:2:0 上采樣和 YCbCr 轉(zhuǎn) RGBJPEG 最坑的地方是色度抽樣。大多數(shù) JPEG 圖像用 4:2:0 抽樣——亮度 Y 每個(gè)像素都有色度 Cb、Cr 每 2x2 像素塊共享一個(gè)值。解碼時(shí)必須先把 Cb、Cr 向上采樣到和 Y 同尺寸再做顏色轉(zhuǎn)換。void upsample_chroma(const unsigned char *cb_small, const unsigned char *cr_small, unsigned char *cb_big, unsigned char *cr_big, int width_big, int height_big, int h_scale, int v_scale) { for (int y 0; y height_big; y) { int sy y / v_scale; for (int x 0; x width_big; x) { int sx x / h_scale; cb_big[y * width_big x] cb_small[sy * (width_big / h_scale) sx]; cr_big[y * width_big x] cr_small[sy * (width_big / h_scale) sx]; } } }邏輯說(shuō)明最簡(jiǎn)單的最近鄰上采樣。效果可以接受但有些工程會(huì)做雙線性插值抗鋸齒效果更好。上采樣維度計(jì)算要嚴(yán)格按 h_scale 和 v_scale 來(lái)4:2:0 時(shí) h_scale2v_scale2色度平面寬高各減半4:2:2 時(shí) h_scale2v_scale1 只有寬度減半。如果從 SOF0 里拿到的是“1x1、2x1、1x2、2x2”這類抽樣因子而非直接寬高要做映射判斷// SOF0 里每個(gè)分量的抽樣因子 unsigned char h_sampling sof_data[comp_index * 3 1] 4; unsigned char v_sampling sof_data[comp_index * 3 1] 0x0F; // 寬高由 Y 分量決定色度分量的實(shí)際尺寸按采樣因子換算YCbCr 轉(zhuǎn) RGB 的公式在工程里寫死了但注意 JPEG 的 YCbCr 是 ITU-R BT.601 范圍不同于 JPEG 編碼時(shí)的全范圍。轉(zhuǎn)換公式// 輸入: Y 范圍 [0,255], Cb/Cr 范圍 [0,255] (未做 128 偏移) // 輸出: RGB 范圍 [0,255]需要做裁減以防止越界 int r (int)(Y 1.402 * (Cr - 128)); int g (int)(Y - 0.344136 * (Cb - 128) - 0.714136 * (Cr - 128)); int b (int)(Y 1.772 * (Cb - 128));邏輯說(shuō)明Cb 和 Cr 在熵解碼后是帶符號(hào)的數(shù)值范圍轉(zhuǎn)為無(wú)符號(hào)時(shí)要加上 128 的偏移。如果不做偏移顏色會(huì)變成一種“負(fù)片色調(diào)”這是 JPEG 轉(zhuǎn) BMP 最容易肉眼發(fā)現(xiàn)的問(wèn)題之一。轉(zhuǎn)換后的 RGB 要做 0~255 限幅因?yàn)槟?DCT 的浮點(diǎn)誤差和色度上采樣的插值會(huì)算出越界值。碰到底部有 SOS 段卻拿不到 DHT 表的情況說(shuō)明源 JPEG 用了“一次性 Huffman 表”的特殊編碼方式把表放在 SOS 之后。這種情況現(xiàn)實(shí)中很少見(jiàn)但部分相機(jī)直出的 JPEG 會(huì)這么干。真遇到了解碼器不能原地崩潰要返回一個(gè)“不支持的 JPEG 變體”錯(cuò)誤并注明原因——這里用 Haffman 表延遲解析的工程極少普通轉(zhuǎn)換場(chǎng)景直接拒絕問(wèn)題不大。5. 轉(zhuǎn)換避坑指南最值得記下的五條實(shí)測(cè)踩坑記錄這一章是實(shí)際調(diào)試中反復(fù)遇到的經(jīng)典問(wèn)題從“花屏”到“錯(cuò)位”到“偏色”每條都帶具體原因和解決方法。如果你拿到的轉(zhuǎn)換工程有問(wèn)題按這個(gè)清單逐個(gè)排查。5.1 BMP 文件打不開(kāi)文件頭長(zhǎng)度和像素偏移算錯(cuò)現(xiàn)象生成的 BMP 能被圖片查看器識(shí)別但提示“文件損壞”或“不支持該格式”。用十六進(jìn)制工具看文件頭部發(fā)現(xiàn) bfOffBits 和實(shí)際像素?cái)?shù)據(jù)起始位置對(duì)不上。原因BMP 文件頭寫入了標(biāo)準(zhǔn) 14 字節(jié) BITMAPFILEHEADER 加 40 字節(jié) BITMAPINFOHEADER但沒(méi)有考慮調(diào)色板的存在。如果輸出為 8 位索引色像素?cái)?shù)據(jù)前面還有 1024 字節(jié)的調(diào)色板數(shù)據(jù)bfOffBits 應(yīng)該是 14 40 1024 1078而不是默認(rèn)的 54。解決寫 BMP 頭之前先確認(rèn)輸出位深和是否帶調(diào)色板bfOffBits 按實(shí)際數(shù)據(jù)布局計(jì)算。注意 biSizeImage 字段也要同步修正否則某些嚴(yán)格校驗(yàn)的查看器如部分嵌入式的解碼庫(kù)會(huì)提前截?cái)?。文件大?bfSize bfOffBits biSizeImage這三處數(shù)值必須自洽。5.2 圖像行錯(cuò)位行字節(jié)數(shù)沒(méi)有按 4 字節(jié)對(duì)齊現(xiàn)象轉(zhuǎn)換出來(lái)的 BMP 整體向左傾斜每一行圖相對(duì)于上一行偏移了幾個(gè)像素而且偏移量隨行號(hào)遞增。用查看器打開(kāi)時(shí)能隱約認(rèn)出畫面內(nèi)容但整幅圖呈“階梯形”。原因BMP 規(guī)定每行的字節(jié)數(shù)必須是 4 的倍數(shù)。假設(shè)寬度為 101 像素、24 位真彩101 × 3 303 字節(jié)303 不是 4 的倍數(shù)需要補(bǔ)齊到 304 字節(jié)補(bǔ) 1 個(gè) 0x00。如果你的代碼直接按“兩字節(jié)對(duì)齊甚至不對(duì)齊”寫入BMP 讀取器每一行都會(huì)從錯(cuò)誤的位置讀下一行階梯形就是這樣產(chǎn)生的。解決在寫入每一行像素后計(jì)算需要補(bǔ)齊的字節(jié)數(shù)用 0x00 填充。經(jīng)驗(yàn)公式rowSize ((width × bytesPerPixel 3) / 4) × 4行間隔 rowSize - width × bytesPerPixel。驗(yàn)證時(shí)輸出一組已知像素值如第一行全部像素設(shè)為紅色看偏移是否消除。5.3 JPEG 圖像整體發(fā)綠YCbCr 偏移量沒(méi)加現(xiàn)象圖像內(nèi)容能看清輪廓但整體色調(diào)嚴(yán)重偏綠膚色變成了奇怪的顏色暗部有一層綠色底色。原因YCbCr 轉(zhuǎn) RGB 時(shí)漏了把 Cb、Cr 減去 128。JPEG 中 Cb、Cr 是“零中心”的128 對(duì)應(yīng)零偏置不減去 128 相當(dāng)于色度信號(hào)整體偏移轉(zhuǎn)換后 G 通道被抬高因?yàn)?G 的公式里 Cb、Cr 是減項(xiàng)引發(fā)偏綠。紅色的物體往往會(huì)變暗藍(lán)色的物體變黑整個(gè)色調(diào)都亂了。解決轉(zhuǎn) RGB 前確認(rèn) Cb、Cr 都減了 128。如果庫(kù)函數(shù)里已經(jīng)有這個(gè)處理檢查是不是重復(fù)減了兩次——有些工程從熵解碼器拿到的 Cb、Cr 已經(jīng)做了偏移處理再減一次會(huì)變成反向偏移同樣產(chǎn)生偏色問(wèn)題。驗(yàn)證方式找一張色卡圖或標(biāo)準(zhǔn)測(cè)試圖轉(zhuǎn)換后取幾個(gè)已知色塊的 RGB 值跟原圖對(duì)比。5.4 PNG 隔行掃描圖轉(zhuǎn)換出來(lái)后只有部分區(qū)域有內(nèi)容現(xiàn)象轉(zhuǎn)換結(jié)果是 8x8 的“方格拼圖”看起來(lái)像采樣率降低部分區(qū)域有內(nèi)容部分區(qū)域是空白。改換另一個(gè)非隔行的 PNG 測(cè)試圖時(shí)一切正常。原因解碼器只處理了 7 個(gè) pass 中的部分?jǐn)?shù)據(jù)。Adam7 隔行把圖像拆成 7 個(gè) pass每個(gè) pass 是原圖在特定行列位置的子采樣。如果代碼把 7 個(gè) pass 的數(shù)據(jù)當(dāng)作 7 張獨(dú)立圖像拼接或重疊寫入結(jié)果就變成拼圖效果。解決正確實(shí)現(xiàn) Adam7 合成。每個(gè) pass 都有各自的行列起始位置和步長(zhǎng)需要按 pass 序號(hào)查表確定寫入目標(biāo)位置。如果不支持隔行掃描正確做法是掃描 IHDR 的 interlace 字段當(dāng)值為 1 時(shí)直接返回“暫不支持 Adam7 隔行”而不是輸出錯(cuò)誤結(jié)果。大多數(shù)工具類轉(zhuǎn)換器不支持隔行是可以接受的但要明確告知用戶。5.5 JPEG 解碼出現(xiàn) 8x8 的塊狀噪聲現(xiàn)象圖像整體能識(shí)別但所有 8x8 像素塊之間有明顯亮度差異看起來(lái)像“馬賽克”特別是平坦區(qū)域如天空、純色背景邊界非常明顯。原因逆 DCT 的精度不夠或者反量化之后忘了做 IDCT、直接拿頻域系數(shù)當(dāng)像素值。還有種可能是 Zigzag 重排錯(cuò)誤導(dǎo)致 DCT 系數(shù)位置顛倒。低頻系數(shù)放錯(cuò)位置會(huì)影響整體亮度高頻系數(shù)放錯(cuò)位置會(huì)出現(xiàn)顆粒狀紋理。解決逐段檢查解碼管線。最有效的定位方式是把 IDCT 后的數(shù)據(jù)暫時(shí)輸出成文件肉眼觀察塊效應(yīng)是否存在如果 IDCT 后正常、BMP 寫入后出現(xiàn)塊效應(yīng)問(wèn)題在 BMP 寫入環(huán)節(jié)的字節(jié)序如果 IDCT 后就有塊效應(yīng)檢查 Zigzag 重排表和量化表的使用順序。6. 進(jìn)階驗(yàn)證方法像素級(jí)對(duì)比腳本與調(diào)色板位深擴(kuò)展這一章講兩個(gè)價(jià)值點(diǎn)怎么驗(yàn)證轉(zhuǎn)換結(jié)果是否真正正確以及怎么把轉(zhuǎn)換器擴(kuò)展到 8 位調(diào)色板 BMP。前幾章解決了“能轉(zhuǎn)”的問(wèn)題這一章解決“轉(zhuǎn)得對(duì)”和“轉(zhuǎn)得更實(shí)用”的問(wèn)題。6.1 像素級(jí)自動(dòng)對(duì)比PSNR 和 MAE 校驗(yàn)?zāi)_本人眼盯著圖看容易漏掉細(xì)節(jié)差異特別是 JPEG 轉(zhuǎn) BMP 這種有損轉(zhuǎn)換如果解碼器有輕微精度損失人眼很難分辨但像素級(jí)對(duì)比能立刻暴露問(wèn)題。Python 腳本適合做這件事——C 的轉(zhuǎn)換器產(chǎn)生 BMPPython 用 Pillow 庫(kù)打開(kāi)原圖和轉(zhuǎn)換結(jié)果逐像素對(duì)比并計(jì)算 PSNR峰值信噪比f(wàn)rom PIL import Image import math def compare_images(src_path, dst_path): src Image.open(src_path).convert(RGB) dst Image.open(dst_path).convert(RGB) if src.size ! dst.size: print(f尺寸不一致: {src.size} vs {dst.size}) return src_pixels list(src.getdata()) dst_pixels list(dst.getdata()) mse 0 max_diff 0 for p1, p2 in zip(src_pixels, dst_pixels): d sum((a - b) ** 2 for a, b in zip(p1, p2)) mse d max_diff max(max_diff, max(abs(a - b) for a, b in zip(p1, p2))) mse / (len(src_pixels) * 3) psnr 10 * math.log10((255 ** 2) / mse) if mse 0 else float(inf) print(fMSE: {mse:.4f}, PSNR: {psnr:.2f} dB, 單像素最大差: {max_diff})參數(shù)說(shuō)明PSNR 值大于 40dB 表示差異非常小30~40dB 基本可接受但可能有輕微色差低于 30dB 意味著解碼器有實(shí)質(zhì)性錯(cuò)誤。max_diff能捕捉極端情況——比如某個(gè)像素差 100 以上說(shuō)明在某個(gè)顏色通道上處理邏輯有問(wèn)題。這個(gè)腳本的價(jià)值在調(diào) JPEG 解碼器時(shí)特別明顯。JPEG 是有損格式不能要求轉(zhuǎn)換結(jié)果和原圖像素級(jí)一致但 PSNR 穩(wěn)定在 40dB 以上用高質(zhì)量原圖測(cè)試說(shuō)明解碼器的精度損失只是量化和浮點(diǎn)運(yùn)算帶來(lái)的沒(méi)有結(jié)構(gòu)性錯(cuò)誤。如果 PSNR 在 25dB 以下基本可以斷定解碼鏈路里有 bug按前面的避坑清單逐項(xiàng)排查。6.2 調(diào)色板模式與位深擴(kuò)展從 24 位真彩到 8 位索引色真彩 BMP 文件體積大嵌入式場(chǎng)景常需要 8 位索引色 BMP。從 RGB888 量化到 256 色的方式直接用中位切分算法Median Cut或八叉樹(shù)量化。中位切分更適合從零實(shí)現(xiàn)// 中位切分量化把 RGB 空間遞歸劃分成 256 個(gè)桶 typedef struct { int r_min, r_max, g_min, g_max, b_min, b_max; int pixel_count; unsigned char r_avg, g_avg, b_avg; } ColorBox; int build_palette(unsigned char *pixels, int pixel_count, unsigned char palette[256][3]) { ColorBox boxes[256]; // 初始化一個(gè)覆蓋全部像素的 box按 RGB 范圍做遞歸切分 // 每次選像素?cái)?shù)最多、顏色范圍最大的 box沿最長(zhǎng)的通道切 // 最終每個(gè) box 的平均 RGB 作為調(diào)色板項(xiàng) return 0; // 返回實(shí)際使用的顏色數(shù) }邏輯說(shuō)明中位切分的本質(zhì)是每次選一個(gè) box找到“像素?cái)?shù)最多”或“顏色范圍最大”的那個(gè)沿范圍最長(zhǎng)的顏色通道切成兩個(gè) box直到湊滿 256 個(gè)。處理上要注意一個(gè)細(xì)節(jié)統(tǒng)計(jì)像素顏色時(shí)用桶化將 8 位通道降到 5 位左右能顯著加快速度代價(jià)是輕微的色彩精度損失。調(diào)色板構(gòu)建后每個(gè)像素取“距離最近”的調(diào)色板項(xiàng)距離可以按歐氏距離或帶權(quán)重的距離計(jì)算——人眼對(duì)綠色更敏感可以給 G 通道高權(quán)重。寫 8 位 BMP 時(shí)文件布局變?yōu)?4 字節(jié)文件頭 40 字節(jié)信息頭 1024 字節(jié)調(diào)色板 像素索引數(shù)組。biBitCount 設(shè)為 8biClrUsed 設(shè)為 256。像素?cái)?shù)據(jù)不是 RGB 三元組而是每個(gè)字節(jié)一個(gè)調(diào)色板索引。如果轉(zhuǎn)換器不支持調(diào)色板量化正確做法是明確返回“僅支持 24 位真彩輸出”而不是自動(dòng)降級(jí)成灰度或截?cái)鄶?shù)據(jù)。這也是工程邊界管理的一部分——明確不做什么比硬做但做錯(cuò)要好得多。從那以后我每次寫格式轉(zhuǎn)換工具都會(huì)強(qiáng)制在工程里放一個(gè) test 目錄和一個(gè)像素級(jí)校驗(yàn)?zāi)_本。原圖、中間結(jié)果、最終輸出三者的像素?cái)?shù)據(jù)隨時(shí)可對(duì)比比對(duì)通過(guò)才算功能完成。否則在 JPEG 解碼器里改一個(gè) Zigzag 表改完到底對(duì)不對(duì)不跑像素級(jí)對(duì)比是很難判斷的。這份工程的代碼組織方式和解碼細(xì)節(jié)可以作為你手頭轉(zhuǎn)換需求的起點(diǎn)——但它不是銀彈遇到特殊變體的圖片色彩配置 ICC、16 位 PNG、漸進(jìn)式 JPEG還是要回來(lái)補(bǔ)解碼器邊界。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲熟女人妻中文字幕一区二区| 精品欧美老熟女一二区| 欧美九一精品久久久熟妇| 欧美经典一区二区三区| 亚洲色图亚洲| 蜜臀99久久精品久久久懂爱| 日韩天天综合| 蜜臀一区二区三区在线| 蜜臀99久| 加勒比色99999| 啊啊啊好舒服好爽啊啊啊视频| 欧美成人性爱视频大全| 99色热国产视频精品| 欧美亚洲小说| 农村少妇久久久久久久| 国产91丝袜 在线播放| 欧美在线色| 刺激性视频黄页| 狠狠爱综合| 亚洲熟女中文字幕在线| 亚洲欧美综合区自拍另类| 欧美大片91| 加勒比综合88| 91 丝袜在线播放| 色妇综合网| 天天影视91看看| 中文字幕免费看| 亚洲黄a三级三级三级看三级| 男人的天堂啪啪| 囯产乱伦一区二区三女| 亚洲综合婷婷| 看一级黄色视频| 日韩性爱高清免费视频| 欧美亚男人的天堂| 日本熟妇熟色97一本在线观看| 91黑人无码激情在线| 亚洲成a人在线观看久| 天天操人人操狠狠插| .精品人妻一区二区三| 69一区二区三区| 久久久久久人妻一区精品色欧美| 日本免费专区| 日本久久久久久久久| 黄页大片在线观看| 亚洲欧洲精品成人| 极品一区二区三区免费| 9 1果冻精品视频| 变态综合色| 久久超碰日韩精品| 亚洲电影中字一区二区| 久久成人国产| 91Chinese在线| 99re久久| 九九十八精品| 羞答答AV中文字| 97超碰影音| 日韩欧美久久婷婷网站| 综合国产影视三级| 手机看片1025| 91色综合色| 人妻少妇精品视频一区二区三区| 成人免费毛片| 国产麻豆一级精品视频| 69超碰综合| 国产精品高潮久久AV| 欲色啪| 国产999精品久久久| 夜夜嗨一区二区三区直播内容| 国产极品馒头逼| 欧美黄色片在线播放| 国产69精品久久久久99尤物| 一色网男人的天堂| 亚洲欧美视| 色五91| 青青草视频导航官网| 97超碰人操| 夜夜嗨一区二区三区直播内容| 久久午夜色播影院免费高清| 久久九九视频九九视频| 红桃视频高潮| 青草精品视频日本久久久久网站在线| 精品蜜乳AV免费观看| 午夜福利免费福利视频| 亚洲AV资源| 99热这里只有精品1| 日本羞羞的视频在线播放| 最新中文字幕精品在线| 99re95| 欧美日韩精品久久久久久久久东北老熟妇| 涩综合导航| 大屁股xxxxx| 97高清啪啪| 久久精品国产亚洲av水密被窝| 岛国在线免费视频| 在线天堂999| 人妻喷水| 十八禁的黄污污免费网站| 中文久久一区| 综合久久久久久久久91| 涩涩五月天| 后入式999| 国产一级内射无挡观看| 国内黄色精品| 麻豆综合一区av| 精品久久視頻在线| 人妻久久一区二区三区 | 日韩av乱伦| 91国产丝袜美女| 操操操五月天婷婷丁香影院| 黄色网址久久精品欧美喷水| 91老妇女| 亚洲性爱无码乱伦av| 亚洲精品 欧美精品| 香蕉热人人精品| 欧美人妻二区三区| 成人免费视瓶| 老熟妇综合| 日韩黄色片子| 91国内外在线| 东亚亚洲无码高清| 蜜臀99久久精品久久久久久| 久9热| 极品人妻少妇综合| 91天天爱| 国产黄色av大片网站| 精品国产乱码久久久兰草影视| 国产无码精品久久久久久| 久久久工口| 69视频入口| 亚州色站 日韩电影| 日本一级特级毛片视频| 超碰97日韩| 97自拍视频在线| 91色插| 精品一区二区3区| 男同专区一区二区三区在线| 国产少妇与亚洲av| 亚洲一区二区三区播放在线| 综合97久久| 五月丁香狠狠爱| 黄页av| 蜜桃精品一区二区三区ww| 国产强奸无码乱伦| 韩国国产欧美情侣视频在线| 夜夜爽妓女| 天天上日日上日韩精品| 天美传媒av一区二区| 黄色片大香蕉| 欧美色宗合| 农村妇女精品一区二区| 亚洲日本韩国在线| 免费αV在线视频| 加勒比久久av| 亚洲欧美色综合| 亚洲图片激情综合另类| 亚洲狠狠入| 久久色人体| 狠狠色噜噜狠狠狠狠2018| 国产精品乱码久久久、久久| 黄色小说亚洲| 五月丁香婷婷综合网| 永久免费观看的毛片的网站| 日本孕妇孕交| 一本一道人妻久久一区二区三区 | 97玖玖人妻| 国产精品999zyz| 性欧美91| 亚洲Av诱惑| 久久国产精品熟女人妻| 五月婷婷丁香| 人人操人人摸人 | 狠狠爱综合网| 欧美专区日本专区| 操逼天美3区| 精品免费囯产一区二区三区| 欲射影视| 乱码熟妇人妻久久久| 综合五月天| 欧美性暴力猛交XXXX| 性爱综合网| 大香蕉黄色一级片免费看| 日韩小电影| 久久亚洲天堂| 欧美在线大香蕉| 色精品极品| 久久精品三级影视| jizzjizz欧美| 中文字幕中文字幕一区二区| 欧美v亚洲v综合v国产v妖精| 97碰碰色| 国产在线激情| 噜噜瑟| 久久是精品| 亚洲精品国产精品乱码不卡| 欧美综合第一| 天美传媒国产原创中文字幕亚洲欧美另类| 天天操天天舔| 天天操天天舔| 日韩av影片在线观看| 伊人激情五月天一区二区| 高清无码久操视频| 国产无码久久高清| 84YTCOM性无码| 日韩成人小视频| 91无码人妻| 日日日骚女人精品| 夜夜青青无码影院| 狠狠爱AV| 美女黄页网站| 免费视频一二三区| 男人的天堂 在线一区| 激情欧美97| 亚洲人妻在线精品| 日韩乱中文| 色呦呦呦在线观看视频| 亚洲第一页色| 日韩在线人妻网站| 屌妞视频久久久久久久 | 国产隔壁老王影院在线| 国产一级特黄大片处女| 天天精品| 性色一线| 伊人9| 97精品视频在线播放| 日韩无码服务区| 欧美激情在线观看视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 最新的亚洲无吗| 久久久久国产精品片区无码直播| 亚洲啪啪性视频| 婷婷久久网| 超碰97精品在线| 中文字幕88av在线| 欧美日韩亚洲少妇寂寞影院正在播放 | 久久久国产av美女私房| 亚洲欧美激情在线视频| 国产11页| 大香蕉琪琪日本女优不卡| 国产精品久久久午夜夜伦鲁鲁| 国产91美女视频| 男人的天堂一区| 国产在线观看91精品一区| 国产92麻豆天美精品色欲5| 水澄无码AV| 超碰免费欧美7| 久久国产乱子伦精品免费女,网站| 男女一进一出视频久久| 欧美日韩岛国大片在线观看| 神马久久网| 亚洲自拍小说| 日韩欧美综合激情| 青青草在线成人视频| 亚洲精品一卡二卡三卡福利视频网站| 亚洲高清91| 操逼日批| 国产精品视频电影| 欧美v日韩v亚洲v最新在线| 免费作爱一级视频| 久久伊人青青草| 久久精品久久久久久久| 欧美日本中字另类在线| 韩国轻伦国内自拍一区| 国产精品视屏| 久久五月天婷婷| 免费久久9999| 成人毛片免费| 中文字幕一区 二区三四五 区日 日骚 | 欧美玖玖爱免费玖玖| 亚洲色宗合| 免费操逼视频下载| 乱久久久| 欧美性生活免费网| 欧美一二在线| 成年无码动漫av片无尽在线| 国产精品女同| 色97干| 天天躁日日躁XXXXYY| 亚洲色性情三级| 99re9| 亚洲高清在线| 超碰在线免费一区二区三区| 丁香六月婷| 久久↗↗| 亚洲国产午夜真人一级片中文字幕精品黄网站| 久久女同性恋一二区| 91香蕉国产尤物视频| 99性爱视频| 人妻激情视频| 五月丁香成人网| 婷婷性网| 九九热精品| 抽插亚洲无码| 久久黄黄| 人妻色偷色噜| 欧美色997| 国产成年女黄特黄| 哈哈操电影AV| 999精品国产高清一区二区| 观看免费区二区三区二| 爽极品影院| 欧亚成人在线视频| 99久久精品无码一区二区| 91九九九吃| 亚洲色图殴美色图激情乱伦| 97亚洲自在精品在线观看| 久久色情| 国产综合色精品在线观看| 一区二区首页| 狠狠操夜夜| 蜜乳av一区二区三区四区不卡| AV无码久久久精品| 超碰九7| 999日韩中文精品观看视频。| 日韩性爱一级片| 99热精品国产| 国产精品青草综合久久| 综合另类| 天天操天天日天天干| 亚洲国产欧美中文永久| 日本精品一区二区三区四区的功能| 日韩99神马视频播放片在线播放| 黄片qw| 精品中文一区二区| 嗯啊不要啊在线 | 日本 欧美 亚中文字幕| A一区片| 国产情色在线| 欧洲Au麻豆| 亚洲情色中文字幕一区| 97爱| 精品久久久久成人码免| 久久欧美1卡2卡3| 综合操逼| av网站免费看| 一区e区三| 亚洲欧美九九九| 日本韩欧美在线播放a| 97在线精品观看视频| 久久久久久久国产a∨| 91精品丝袜久久久久久| 伊人操操| 国产欧美精品日韩区二区麻豆天美| 欧美中文字幕日韩在线| 久久久久九九九九九| 人妻在线中出视频| a在线观看| 久久久久久久久久va| 日韩青久久| 青青草五月天| 又大又白奶子| 欧美色色色| 手机在线人成免费视频| 免费观看网黄| 久久产精品一区二区三区电影| 少妇高潮喷水无套久久久久久| 久热伊人99re| 九九99精品视频在线观看| 黄色视频60分钟| 91麻豆天美传媒在线| 日韩特一级久久| 久久熟妇五十路一区| 丁香五月影院| 亚洲制服欧美另类内射| 人人贴人人摸| 亚洲AV无码秘 蜜桃臀国精产品| 亚洲另类色综合网站| 99色婷婷中文字幕乱色| 佐山爱中文字幕| 欧美美女自慰一区二区三区| 99热| www.丁香五月| www.婷婷| 蜜臀久久99精品久久综合| 欧美网站免费| 综合自拍| 免费视频无码| 国产成人资源| 天操天操夜操夜月操月年年操| 五月天激情婷婷| 丁香五月自拍| 六月婷婷综合| 久久25| 91在线免费观看处女| 欧美嫩性色| 亚洲精品色| 96AV精品| 青青草视频久久久久| 精品大久久| 欧美永久激情一区二区| 神马久久久久久久久久| 97资源免费视频| 2017大香蕉国产精品久久| 嗯嗯啊啊好疼| 9997se| 蜜臀中文无码午夜| 啪啪综合网| 人妻二区| av日韩手机在线影视| 欧美亚洲中文字幕| 91熟女熟妇视频网站| 色婷婷aV一区二区三区麻豆综合| 色综合加勒比四四季| 天天综合网AV91| 久久久成人免费av电影| 久9无限国产| 婷婷婷婷婷婷久久久久| av一区二区三区四区| 亚洲成a人片在线观看中文!!!| 手机在线人成免费视频| 婷婷六月天| 性色avv| 欧美日本天堂| 亚洲色图 91| 欧美97在线欧| www.久久最新地址| 欧洲色| 91中文精品日韩欧美在线| 97干综合网| 婷婷10月天青娱乐| 日日插夜夜| 国产欧美一区激情交| 国产精品小视频一区二区三区| 嗯嗯啊好大| 久久久久国色αv免费观看| 亚洲天堂五月天国产| 最新日产中文在线麻豆| 欧美熟爽综合| 91美女视频直播| 俺去啦俺来也久久综合| aaa一级黄片| 9精品在线| 97免费在线观看| 黄色网址在线免费观看| 国产蜜臀精品一区免费尤物| 中文字幕免费看| 内射夫妻三片| 日日夜夜天天| 91模特在线观看| 91色人妻| 香蕉在线一区二区三区| 美女骚尻视频| 亚洲精品乱码线路中文字幕 | 色天堂综合| 97超碰香蕉| 日韩三级天堂在线观看| 激情综合av| 2019天天干| 97久久超碰| 北野未奈加勒比av| 国产精品一区av在线| 日韩99神马视频播放片在线播放| 粉嫩AV一区二区夜夜| 日韩三级天堂在线观看| 久久国产对白激情浪潮 | 97色在线| 日本久久久久久久久久| 日韩成人精品视频自拍| 超碰综合色| 五十路六十路七十路熟婆| 女人天堂AV五区在线| 欧美高清91| 小情侣高清国产在线视频| 国产后入清纯| 国产92麻豆天美精品色欲5| 性性欧美| 九九干| 日本不卡二三区| 人妻二区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 免费人人搞97| 国产隔壁老王影院在线| 人妻熟女一区二区三区在线| 中文字幕精品一区欧美| 精品久久久久久无码| 天美传媒国产原创中文字幕亚洲欧美另类 | 久9爱精品| 91|九色|国产熟女| 中文有码9| 玖色AV| 精品无码久久久久久久杏吧| 欧美永久激情一区二区| 久久黄色视频一区二区三区 | 操迟操逼在巾线Fre看| 使劲用力艹少妇视频一区二区| 亚洲欧洲综合av在线| 亚洲日韩熟女人妻高清在线| 熟女被操视频网址| 亚洲欧美综合| 怡红院成人av| 91狠狠综合久久| 一二三区精品视频| 成人熟女视频一区二区三区| 中文字幕一区二区三区高清| 日韩在线观看AV| 婷婷五月天在线观看| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 欧美色图人妻| 综合啪啪| 2023天天操夜夜操| 最新9久久久9免费视频| 天天插天天射| 午夜无遮挡男女啪啪视频| 神马九九九| 久操综合在线| 日韩一级成人毛片免费观看| 日韩啪啪视频| 91久久久老司机| 狠狠色丁香| 99亚洲精品| 伊人宅男大香蕉| 黄色AV免费| 亚洲日韩东京热一区| 国产日比| 色网在线视频观看免费| 四虎免费在线观看| 天天躁夜夜躁狠狠躁AV| 97人亚洲综合字幕| 五月天激情四射| 黄色片,com| 不卡在线观看视频| 精品二区三四区五电影 | 开心五月激情网| 日韩人妻制服丝袜av| 色欲久久99国产精品久久久久久| 99色骚| 五月天丁香欧洲日韩| 日韩人妻播放| 啪啪性爱免费视频| 欧美 亚洲 第一页| 中文无线日韩一区| 伊人991| 黄页大片在线观看| 色色操| 图片区小说区| 久草国产在线视频| 另类亚洲一区二区三区| 啊啊啊啊啊啊好多水| 偷拍亚洲情色| 偷拍片久久| 亚洲情色在线| 熟妇精品juliaannAV| 炮色五月| 91人人看| 97爱免费插| 女优视频第10页| 久热9| 最新日韩黄片| 亚洲精品视频在线播放| 大香蕉一线视频| 一区操逼日比视频| 免费伦费视频在线观看| 久久久99999久网站| 一区=区三区视频| 亚洲18禁| 日韩在线AB| 九九热男人天堂| 一品道视频一区二区三区| 五月激情综合网| 伊人99热| 96AV精品| 欧美制服网站美腿丝袜| 亚洲不卡不卡中文字幕不卡| 中文字幕天天天天天| 爱干爱射网啊啊啊| 国产AV人人 夜夜人人澡| 啊啊啊啊啊好大好舒服想要| 一本一首道人妻少妇免费久久| 伊人精品视频| 亚洲人人夜夜澡人人爽| 天天影视综合色| 操熟女91| A 天堂| 黄视频免费| 日韩精品碰碰| 天堂种子在线www网资源| www久久99| 人妻天堂综合网| 九一综合精品视品av| 西西美女视频网| 国产AV人人夜夜澡人人爽麻豆| 欧美日日人人天天| 91丝袜美女视频| 韩国免费播放一级毛片| 精品人妻中文字幕4399| 国产做?爰片久久毛片?片美国| 熟女乱伦二区| 天堂资源欧美| 91久久久久久久| 夜夜高潮夜夜爽夜夜爱爱一区| 国产传媒日韩欧美| 天天做日日做| 五月色丁香| 怡春苑东京热| 国产人妻久久精品一区二区三区| 深夜福利黄片| 自拍大香蕉乱插| 日本潮催一卡操| jk白丝没脱就开始啪啪| 99在线免费观看| 人人搡人人肉久久精品| 99re黄 | 青青草自拍视频在线播放| 嗯嗯,好大,好爽,好骚| 色亚洲欧美| 9丨亚洲一区二区在线| 黄色片大香蕉| 青青草五月天| 久久久日本电影| 日韩精品人妻一| 蜜臀久久99精品久久久老,,| 亚洲情色综合网| 久久久新亚洲AV| 亚洲av影院在线观看| 日本人妻一区二区| 婷婷10月天青娱乐| 岛国片国产成人亚洲播放| 国内91熟女人妻丝袜天天精品视频在线| 97精品视频免费| 欧美性91| 综合网色| 97天天插| 欧美色性爱| 自拍二页| 久久亚洲中文字幕视频| 啊啊啊啊嗯嗯嗯用力好爽 | 啊啊啊好大好深| 天天做日日做天天欢。| 国产美女激情| 97色伦97色伦国产欧美| 日韩乱码Av| 欧美日韩久久精品爱爱| 第一高清av中文字幕| 天美传媒AV国产在线| 国产丝袜美女在线一区| 国产精品情侣啪啪| 精品九九九九九| 男人的天堂啪啪| 91狠狠综合久久| 探花精品视频| 91精品国| 99综合免费视频| av2014 日韩在线中文字幕| 日韩欧美亚洲一区二区三区影院 | 午夜爽爽爽在线观看永久入口姬片| 久操 高清| 大香蕉乱级| 97内射偷拍| 精品人妻一区二区三区四区石在线| 97久久资源| 91九九| 色av中文字| 白丝一区| 色噜噜人妻丝袜AV资源| 翔田千里一区二区三区奶水| 品亲网欧美品亲网| 极品尤物自安慰| 少妇久久久免费| 日本中文字幕在线电影| 熟妇女伦乱视频| 混色激情av| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 少妇精品久久久八区九区| 91动漫操逼视频| 久久久一区二区三区麻豆| 亚洲人人操| 91综合网| 国产精品久久久九九九| 国产精品亚洲一区二区三区四区| 国产农村妇女毛片精品久久| 亚洲少妇色| 91久久九九精品国产综合| 亚洲涩涩| 东京热亚洲一区二区| 狠狠操使劲操| 亚洲精品 欧美精品| 岛国成人av在线播放网址| 亚洲资源站| 少妇人妻精品| 亚洲欧美激情在线视频| 91丝袜在线观看| 蘋果手機免費看成人Av| 色区久久| 精品人妻1区| 欧美视频一区二区三区| 97亚洲一区| 激情干在线| 精品无码久久久久久久久果冻糖心| AV在线资源| 人妻久久久| 久久久久亚洲AV无码专区少妇| 亚洲中文字幕av| 午夜欧美J进J出白浆流出久久久| 国语对白在线播放视频| 在线a亚洲视频播放在线| 激情综合网一盗摄| 麻豆久久视频在线地址| 欧美黑人精品一区二区| 国产91影院| 视频在线97| 九九英色视频| 97人人草| 一区二区三区免费岛国片| 久久超碰网| 亚洲天堂资源| 欧美高清性猛交| 天天天天干| 亚洲日韩美女中文字幕乱| 日韩啊V| 成人青青草原伊人| 超碰在97| 女生自91网站| 蜜臀AV一区二区三区激情综合| 国模吧 一区二区三区| 日本一区视频在线观看| 中文字幕丰满子伦无码专区在线视频最新 | 久9精品| 天天综合站| 欧美日韩婷婷中文| 嗯嗯啊啊啊好舒服| 国产女人高潮视频| 97色干| 久久精品国产96精品亚洲拳交| 天堂69亚洲精品中文字| 2019天天干| 亚洲资源站| 99热欧美| 欧美操逼录像国产黄色国产| 久久久九| 亚洲精品97p| 蜜桃臀久久| 超碰日韩美妻| 青青青草伊人精品| 亚洲AV不卡在线观看| 国产精品天干天干综合网麻豆| 亚州精品丝袜-不卡成人免费| 婷婷亚洲中文字幕在线| 伊人成人中文字幕久久网| 色欲天天综合网| 综合色99| www.色婷婷| 9久综合网| 青青草日本无码| 在线观看AV不卡| 东京太热久久久| 欧美激情亚洲色图| 欧美一二三区四五区| 嗯嗯啊啊用力视频免费| 婷婷情色五月天| 亚洲情色在线| 亚洲情色综合网| 尤物AV免费网站| 人妻第一页| 白丝av| 日韩少妇丰满亚洲| 嗯嗯,好大,好爽,好骚| 欧美 熟女 日韩| 日韩高清一二三| 91久久国产精品| 欧美97超碰| 无码久久国产| 啪啪视频亚洲第一| www色日本| 长长久久免费视频| 日韩一区二区熟女| 精品9区| 校园春色 亚洲| 夜夜爽夜夜| 无码人妻精品一区二区中文| 天天操天天舔| 骚货| 日韩精品9区| 加勒比aⅴ| 手机午夜电影神马久久| 天天视频综合在线观看视频| 天天日少妇逼AV| 黄总AV色图| 亚州,欧美在线| 色欲天天综合久久久无码网中文| 欧美国产精品| 91五月天| 欧美日韩亚洲五月天婷婷| 亚洲在线A| 国产中出内射一区二区| 国产精品宅男免费| 国产少妇与亚洲av| 国产AB视频| 中文字幕蜜乳av| 最新中文字幕在线亚洲| 毛片中心9视频99| 日韩淫色网| 国产区日韩区在线观看| 日本韩欧美在线播放a| 一道本东京热加勒比一区二区三区| 大香蕉欧美国产日韩高潮| 老女人综合| 黄色网址在线免费观看| 富二代亚洲精品99| 亚洲中文sv| 手机在线中文字幕国产| 日韩99999色| 欧美激情精品久久久久久| 日韩性爱1级片视频| 欧美极品少妇交| 成人草草视频| 91久久精品中文字幕| 综合日韩激情另类图片| 91亚洲人| 亚洲精品亚洲人成人网| 夜夜操中文字幕| 久艾草在线精品视频在线观看| 五月激情小说| 黄色欧美性爱视频| 天天日天天操VV| 亚洲精品一二牛牛| 精品丰满人妻一区二区三区免费观| 熟女久久久| 成人aⅴ一区二区三区| 一区二区三区日韩欧美 | 亚洲综合成人网| 东北操逼| 黄色网址在线免费观看| 超碰这里只有精品| 成人无遮挡毛片免费看| 特级大荫道BBwBBwBBW| 欧美色涩| 国产少妇与亚洲av| 亚洲se91| 长长久久免费视频| 人妻少妇精品久久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 九九九九免费高| 免费超碰97在线观看| 国产精品久久久久久久久久久久久久久久久久 | 男人天堂导航| 韩国黄色片精品久久久 | 中文字暮97| 国产精品久久久 | 91欧美综合| 色性综合| 在线视频免费观看午夜| 久9久| 日韩偷拍一区二区三区| 午夜精品久久久久| 26uuu性物| 大屁股国产在线视频| 免费强奸av| 精品人妻15区| 亚洲午夜免费狠狠干| 国产熟女精品一区二区| 打av高清| 亚洲精品天堂久久A∨51成人漫| 九九九热精品| 亚洲福利中文字幕在线| 色欲久久99国产精品久久久久久| 欧美午夜精品久久久久久超碰| 欧美亚洲中文| 第45页一区二区| 97精品熟女少妇一区| 怡红院亚洲怡春院av| www久久久| 久久久亚洲熟妇熟女| 殴美牲| 中国人高清www色视频免费| 欧美性爱免费短视频| 亚洲精品国产精品乱码不卡| 日韩欧美综合激情| 国产农村妇女毛片精品久久| 狼人综合婷婷激情四射 | julia国产在线| 精品99999久久久久久| 亚洲 欧美 制服 另类 自拍| 综合大香蕉美。| 极品五月天噜噜| 操逼免费视频无码国产| 少妇熟女视频一二三区| 国产不卡片| 日韩乱中文| 国产精品播放| 韩国国产欧美情侣视频在线| 91日韩在线| 国产对白刺激视频| 亚洲成成熟女人综合一区二区| 九九九九九九亚洲| 日韩成人性爱AV| 欧美大片91| 久久久久久久久国产| 欧美日韩性感| 中日韩欧美精品无码AⅤ一区二区| 91中文字幕制服丝袜免费视频| 色综合加勒比四四季| 99久久久久| 三级AV入口| 91五十路| 九九九国产精品| 成人热久久精品| 精品国产一区二区三区av在线资源| 人人操人人摸人人看人人插| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 青青草天天亲夜夜操网| 亚洲欧美色图小说| 巨乳特殊服务按摩| 精品少妇人妻| 亚州成人a∨| 五月天伊人| 91操人| 欧美日韩性爱电影在线| 久久久蜜桃臀无码视频| 俺去啦自拍| 97精品国产手机| 欧美少妇一区二区三区| 欧美国产日韩清纯唯美| 91精品国产高清久久久久久,亚洲成人| 肏逼视频日本| 中文字幕制服诱惑| 男人的天堂久久| 后入式五六区| 国产第11页| 久久伊人青青草| 97色色色综合网站| 大香蕉伊人一区在线观看| 天天做天天爱天天爽| 婷婷激情综合网| 男人的天堂一区三区| 免费A V在线播放| 亚州一区二区成人片免费| 欧美一二三级精品在线| 韩国免费播放一级毛片| 色99999| 男人的天堂2018| 精品福利| 国产精品999aaa| 思思热国产高清| 久久久久亚洲三级电影| 老熟女乱伦片| 日韩无码视频黄色| 免费国产电影一区二区| 粉嫩av平台| 性久久久| 国产成人自拍视频视频| 日日日日做夜夜夜夜无码| 岛国免费黄色网址| www.久久最新地址| 人妻在线视频| 美女自卫慰黄网站免费| 五月天综合| 美女黄页| 青青草视频导航官网| 久久伊人青青草| 欧洲亚洲人人爽爽视频| 五月天AV资源| 亚洲成人ab| 日本视频在线中文字幕| 国产综合在线视频网站| 亚洲一区二区久久久久| 三级三级三级a级全黄三| 另类一区| 蜜臀久久99精品久久久老,,| 伊人大香蕉在线| 激情综合av| 欧美黑人168页欧美黑人167| 亚洲 欧美综合| 色色毛片| 亚洲五码一区二区三区| 综合激情婷婷| 欧美专利1区2区3区4区5区免费| 麻豆天美传媒在线视频天堂| 精品视频久久区| 天天操妹子| 日本成人免费一区二区三区| 日韩Va亚洲va欧美Ⅴa久久| 婷婷亚洲五月***久久| 亚洲nv男人的天堂网| 天天综合香 ld视频| 婷婷激情五月综合| 超碰97久久| 91成人久久 | 欧美丰满少妇交换91欧美精品| 91九色丨风韵犹存| 女同女同恋久久级三级| a在线观看| 久久精9| 熟女少妇视频| 日韩在线一区高清在线| 五月激情在线| 亚州色国| 色香AV| 久久精品国产亚洲AV片多多| 东北黄色电影| 国产欧美日产一区二区三区 - 国产欧美日 | 日韩精品免费高清视频在线| 丁香六月激情综合| 91超碰碰在线| 97天天综合| 亚洲AV无码国产精品久久久久| 大鸡吧尹人在线| 日本久久久久久久久久| 大香蕉视频一二三区| 玖玖在线视频| 亚洲国产亚洲天堂| 乱伦熟妇一区二区| 嗯啊不要在线| 精品无码产区一区二| 国产在线能看的你懂的| 成人av免费观看| 久久熟女久| 亚洲日韩在线a不卡99精品| 制服乱伦| 91青青在线视频| 人人做天天爱| AV天堂丝袜| 男同专区一区二区三区在线| 日本视频一区二区三区| 好看的91视频| 插入逼91| 天天综合~91入口| 九九九九热只有精品| 97人人操人人摸人人爱| 欧美色一二三| 一区二区三区免费视频入口| 欧美|91色综合| www欧美91| 欧美一区二区亚洲天堂| 色香91| 国产浮力影院第1页| 色哟哟1区2区| 熟妇的味道HD中文字幕| 丝袜喷水在线| 亚洲综合97中文网| 加勒比99999| 欧美视频在线视频免费va| 欧美青青草视频| AAAAAAAAA黄片| 狠狠躁日日躁夜夜躁A| 亚洲精品天堂久久A∨51成人漫| 嫩草伊人久久精品| 伦激情人妻另类人妻| 97这里都是精品| 久热影视| 日本男人插女人的逼黄色| 三级AV入口| 欧美国产有色电影| 在线免费观看日韩一区| 骚女高跟AV在线| 18禁的网站在线| 日本道日本道中文字幕日本道最新日本道在线观看 | 亚洲精品无码少妇久久| 欧美亚洲清纯| 国产精品成人在线| 夜夜躁狠狠躁日日躁av| 99re6久热只有精品6在线直播 | 亚洲精品骚逼| 曰韩操B| 国产精品第一页国产大屁股视频免费区i| 日韩国产在线观看av| 果冻传媒一区二区三区| 男女一级A片大黄,一进一出| 另类欧美色| 天堂日本亚洲欧美| 九月激情婷婷| 免看60秒涩涩视频| 五月丁香六月婷| 1769一区| 在线小视频| 色99色| 亚洲 小说 欧美 激情 另类| 熟女AV一区| 丁香九月激情啪| 97精品免费视频网站| 亚洲综合在线高清| 高清无码 国产精品| 91无码人妻精品一区二区三区蜜桃 | 无卡一区=区| 欧美夜夜狠| 国产家庭乱伦性爱视频| 亚洲自拍青操视频| 天堂蜜桃无码视频一区二区| 日产欧美电影一区二区三区| 国产女人9999| 丁香五月综合| 亚洲免费成人在线高清无码视频| 国产女主播视频在线观看| 首页亚洲国产高跟丝袜诱惑视频| 欧美在线播放| 91N综合网在线| 96AV精品| 特级毛片特黄久久免费看 | 99国产精品在线观看| 秋霞影音一区二区三区| 超碰97中文| 天天天操天天天爱| 亚洲一二三精品久久网| 亚洲中文字母在线播放| 偷拍精品一区二区三区| 91色综合色| 成人熟女视频一区二区三区| 日韩黄色成人性爱| 丁香五六月啪啪| 78m成人视线| 久草草一二三四区久久| 色综合美国| 亚洲欧美日韩综合在线尤物| 亚洲黄色视频在线观看视频| 美女高潮国产高清| 九热超碰| 天堂在线一区二区| 色精品极品| av九九| 国产综合永久精品日韩鬼片| 夜夜草天天| 超碰在线一区二区三区| 四虎影视永久在线观看精品免费网站| 天天摸天天插天天日| 久久男女激情视频网站| 黄片视频,下载| 私人尤物在线精品不卡| 日韩免费人妻色情网站| 黄色网址在线免费观看| 久久透逼视频| 凹凸视频在线一区二区| 午夜欧美精品久久久| 激情文学小说一区二区| 亚洲视频小说| 久久视网78| 青青草在线视频人人想人人上| www.超碰| 97色干| 久操大香蕉| www.色婷婷色综合| 影音先锋中文字幕日本好一区二区| 97在线精品观看视频| 性色av大全| 日韩欧美大片免费高清啪啪| 91成人18| 中文视频在线观看| 2017天天操| 欧美日韩资源| 日韩精品-原创伙伴| 久久久性爱| 久久高潮妇女视频| 精品传媒在线一区| 玖玖久久久| 久一区久久蜜桃| 淫荡网址| 超碰免费97| 欧美性爱综合,免费| 亚洲欧洲中文日韩女优乱码| 91在线精品一区二区三区| 99婷婷一区二区| 9国产超碰| 八戒无码国产午夜福利| 天天插夜夜操| 一起草日韩| 92人人操人人| 超碰精品在线| 天天添天天干电影| 激情图片伦理国产一区二区日韩| 欧美爆操91| 亚洲日韩东京热一区| 久操视频在线| 999久久久国产精品|