精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux驅(qū)動開發(fā)之Fbdev雙緩存快速入門

系統(tǒng) Linux
在 single buffer 的場景下,LCD user 和 LCD controller / gpu 總是在共用同一個 framebuffer,且沒有同步機制。

[[382813]]

本文轉(zhuǎn)載自微信公眾號「嵌入式Hacker」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系嵌入式Hacker公眾號。

一、為何需要 double buffer?

single buffer 會導致:

屏幕撕裂(tearing),即在屏幕上同時看到多幀數(shù)據(jù)拼接在一起。

single buffer 為何會造成撕裂:

refresh rate 和 frame rate 不一致。

refresh rate 表示的是 屏幕每秒能更新多少次顯示,例如 30hz / 60hz。

frame rate 表示的是 lcd controller / gpu 每秒能繪制多少幀數(shù)據(jù),例如 30fps / 60fps。

LCD controller / gpu 和 屏幕協(xié)作完成一幀圖像的顯示:

[[382817]]

在 single buffer 的場景下,LCD user 和 LCD controller / gpu 總是在共用同一個 framebuffer,且沒有同步機制。

LCD user 是寫者,LCD controller / gpu 是讀者。

由于存在競爭關(guān)系且讀寫沒有同步機制,framebuffer 里必須會發(fā)生同時存在frame N 和 frame N-1 的數(shù)據(jù),此時 LCD 將 framebuffer 的數(shù)據(jù)顯示出來時,就會看到撕裂的效果:

[[382818]]

可以通過 double buffer+vsync 解決撕裂的問題。

double buffer,顧名思義,就是有 2 個 framebuffer,其工作邏輯如下:

  • LCD controller : draw fb0 to screen
  • LCD user : write data to fb1
  • LCD controller : draw fb1 to screen
  • LCD user : write data to fb0
  • 循環(huán)...

vsync 機制則用于確保一幀圖像能不被打斷地顯示在屏幕。

如何支持 double buffer?

需要驅(qū)動和應(yīng)用互相配合:

 

二、編寫支持 double buffer 的 fbdev 驅(qū)動

fbdev 框圖:

 

先梳理一下思路:

讓驅(qū)動支持 double buffer 需要做 3 件事。

1. 申請2 x buffer:

  1. size = (2 * width * height); 
  2. fbi->screen_base = dma_alloc_wc(sfb->dev, size, &map_dma, GFP_KERNEL); 

2. 將 buffer 相關(guān)的信息保存 struct fb_info-> struct fb_var_screeninfo。

  1. struct fb_var_screeninfo { 
  2.     __u32 xres;            /* visible resolution        */ 
  3.     __u32 yres; 
  4.     __u32 xres_virtual;        /* virtual resolution        */ 
  5.     __u32 yres_virtual; 
  6.     __u32 xoffset;            /* offset from virtual to visible */ 
  7.     __u32 yoffset;            /* resolution            */ 
  8.     ... 

[[382819]]

xres 和 yres 是真實的 LCD 分辨率的寬和長;

xres_virtual 和 yres_virtual 是顯存區(qū)域的寬和長;

xoffset 和 yoffset 用于指定當前使用哪一個 Buffer 進行繪制。使用 Buffer0 時 ,xoffset = 0,yoffset=0; 使用 Buffer1 時,xoffset = 0, yoffset = yres * 1;

3. 支持切換 buffer,具體的就是實現(xiàn) ioctl:FBIOPAN_DISPLAY。

pan 的本意是平移,可以想象成顯存上方有一個取景框,平移取景框可以看到不同的顯示內(nèi)容。

實例分析:goldfishfb.c

goldfishfb.c 是虛擬硬件 goldfish 的 fbdev 驅(qū)動,我們可以參考這個文件,學習如何實現(xiàn) double buffer。

1. 分配 2 x buffer:

  1. int goldfish_fb_probe() 
  2.     ... 
  3.     framesize = width * height * 2 * 2; 
  4.  
  5.     fb->fb.screen_base = (char __force __iomem *)dma_alloc_coherent(&pdev->dev, framesize, &fbpaddr, GFP_KERNEL); 

2. 設(shè)置 fb_var_screeninfo:

  1. int goldfish_fb_probe() 
  2.     ... 
  3.     fb->fb.var.xres  = width; 
  4.     fb->fb.var.yres  = height; 
  5.     fb->fb.var.xres_virtual = width; 
  6.     fb->fb.var.yres_virtual = height * 2; 

3. 實現(xiàn) ioctl / FBIOPAN_DISPLAY:

  1. static struct fb_ops goldfish_fb_ops = { 
  2.  ... 
  3.  .fb_pan_display = goldfish_fb_pan_display, 
  4. }; 
  5. int goldfish_fb_pan_display() 
  6.     ... 
  7.  
  8.     // 將新的顯存地址告知 lcd controller 
  9.     writel(fb->fb.fix.smem_start + fb->fb.var.xres * 2 * var->yoffset, 
  10.         fb->reg_base + FB_SET_BASE); 
  11.  
  12.     // 等待 LCD controller 的 vsync 信號 
  13.     wait_event_timeout(fb->wait,fb->base_update_count != base_update_count, HZ / 15); 

當LCD controller 將一幀圖像完整地顯示在 LCD 上后,就會產(chǎn)生一個中斷,在中斷里就會執(zhí)行喚醒睡眠在 fb_pan_display 里的進程。

如果你想多了解一些,可以閱讀 DRM 框架里的 fbdev 兼容代碼,此代碼也是支持 double buffer的:

  • linux/drivers/gpu/drm/*/*_drm_fbdev.c
  • linux/drivers/gpu/drm/drm_fb_helper.c

三、編寫支持 double buffer 的 fbdev 應(yīng)用

驅(qū)動支持 double buffer 后,還得在應(yīng)用程序里將其使用起來。

先梳理一下思路:

  1. 檢查是否支持 double buffer;
  2. 使能 double buffer:FBIOPUT_VSCREENINFO;
  3. 更新 buffer 里數(shù)據(jù);
  4. 通知驅(qū)動切換 buffer:FBIOPAN_DISPLAY;
  5. 等待切換完成:FBIO_WAITFORVSYNC;

實例分析:show_color.c

  1. static int fd_fb; 
  2. static struct fb_fix_screeninfo fix;    /* Current fix */ 
  3. static struct fb_var_screeninfo var;    /* Current var */ 
  4. static int screen_size; 
  5. static unsigned char *fb_base; 
  6. static unsigned int line_width; 
  7. static unsigned int pixel_width; 
  8.  
  9. int main(int argc, char **argv) 
  10.     int i; 
  11.     int ret; 
  12.     int buffer_num; 
  13.     int buf_idx = 1; 
  14.     char *buf_next; 
  15.     unsigned int colors[] = {0x00FF0000, 0x0000FF00, 0x000000FF, 0, 0x00FFFFFF};  /* 0x00RRGGBB */ 
  16.     struct timespec time
  17.  
  18.     ... 
  19.      
  20.     fd_fb = open("/dev/fb0", O_RDWR); 
  21.     ioctl(fd_fb, FBIOGET_FSCREENINFO, &fix); 
  22.     ioctl(fd_fb, FBIOGET_VSCREENINFO, &var); 
  23.  
  24.     line_width  = var.xres * var.bits_per_pixel / 8; 
  25.     pixel_width = var.bits_per_pixel / 8; 
  26.     screen_size = var.xres * var.yres * var.bits_per_pixel / 8; 
  27.  
  28.     // 1. 獲得 buffer 個數(shù) 
  29.     buffer_num = fix.smem_len / screen_size; 
  30.     printf("buffer_num = %d\n", buffer_num); 
  31.      
  32.     fb_base = (unsigned char *)mmap(NULL , fix.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd_fb, 0); 
  33.     if (fb_base == (unsigned char *)-1) { 
  34.         printf("can't mmap\n"); 
  35.         return -1; 
  36.     } 
  37.  
  38.     if ((argv[1][0] == 's') || (buffer_num == 1)) { 
  39.         printf("single buffer:\n"); 
  40.         while (1) { 
  41.             for (i = 0; i < sizeof(colors)/sizeof(colors[0]); i++) { 
  42.                 lcd_draw_screen(fb_base, colors[i]); 
  43.                 nanosleep(&timeNULL); 
  44.             } 
  45.         } 
  46.     } else { 
  47.         printf("double buffer:\n"); 
  48.  
  49.         // 2. 使能多 buffer 
  50.         var.yres_virtual = buffer_num * var.yres; 
  51.         ioctl(fd_fb, FBIOPUT_VSCREENINFO, &var); 
  52.  
  53.         while (1) { 
  54.             for (i = 0; i < sizeof(colors)/sizeof(colors[0]); i++) { 
  55.  
  56.                 // 3. 更新 buffer 里的數(shù)據(jù) 
  57.                 buf_next =  fb_base + buf_idx * screen_size; 
  58.                 lcd_draw_screen(buf_next, colors[i]); 
  59.  
  60.                 // 4. 通知驅(qū)動切換 buffer 
  61.                 var.yoffset = buf_idx * var.yres; 
  62.                 ret = ioctl(fd_fb, FBIOPAN_DISPLAY, &var); 
  63.                 if (ret < 0) { 
  64.                     perror("ioctl() / FBIOPAN_DISPLAY"); 
  65.                 } 
  66.  
  67.                 // 5. 等待幀同步完成 
  68.                 ret = 0; 
  69.                 ioctl(fd_fb, FBIO_WAITFORVSYNC, &ret); 
  70.                 if (ret < 0) { 
  71.                     perror("ioctl() / FBIO_WAITFORVSYNC"); 
  72.                 } 
  73.                  
  74.                 buf_idx = !buf_idx; 
  75.                 nanosleep(&timeNULL); 
  76.             } 
  77.         } 
  78.          
  79.     } 
  80.      
  81.     munmap(fb_base , screen_size); 
  82.     close(fd_fb); 
  83.      
  84.     return 0;    

運行:

  1. $ ./show_color single 
  2. buffer_num = 1 
  3. single buffer: 
  4.  
  5. $ ./show_color double 
  6. buffer_num = 2 
  7. double buffer: 

該程序會在屏幕上循環(huán)的顯示不同的顏色。

當傳入 "single" 參數(shù)時,使用單 buffer,可見撕裂。

當傳入 "double" 參數(shù)時,使用雙 buffer,不再撕裂。

代碼不是很復雜,我就不再詳細分析了。

如果你想多了解一些,可以閱讀開源軟件 SDL-1.2 里的 sdl_fbvideo.c,此代碼也支持了 double buffer。

另外,現(xiàn)在越來越多的顯示設(shè)備走的是 DRM 框架,該框架自然是支持多 buffer的。感興趣的小伙伴,自行查看下面的代碼:

https://github.com/dvdhrm/docs/blob/master/drm-howto/modeset-double-buffered.c

四、相關(guān)參考

百問網(wǎng) / 韋東山驅(qū)動大全教學視頻:https://www.100ask.net/detail/p_5ff2c46ce4b0c4f2bc4fa16d/8 

維基百科:https://en.wikipedia.org/wiki/Screen_tearing

 

責任編輯:武曉燕 來源: 嵌入式Hacker
相關(guān)推薦

2023-02-13 09:01:29

Linux驅(qū)動實例

2011-09-02 15:18:49

Sencha Touc

2010-07-19 10:05:52

ibmdwLinux

2011-07-11 09:29:32

PHP面向?qū)ο缶幊?/a>

2009-06-01 15:32:30

EclipseJPA入門

2012-02-29 00:49:06

Linux學習

2009-10-21 12:45:07

linux程序開發(fā)基礎(chǔ)入門

2009-12-09 10:50:53

嵌入式Linux

2012-05-30 15:15:42

ibmdw

2011-11-08 10:36:42

Java

2024-08-27 09:09:49

Web系統(tǒng)JSP

2011-09-02 15:42:55

Sencha Touc布局

2011-09-02 15:58:38

Sencha Touc布局

2021-03-11 12:23:13

Linux驅(qū)動開發(fā)

2012-03-01 22:37:02

Linux入門

2009-12-17 15:59:26

Linux驅(qū)動開發(fā)

2020-09-04 15:38:19

Web前端開發(fā)項目

2016-12-15 14:55:31

Linux定時延時

2022-09-26 00:00:01

java代碼開發(fā)

2012-02-29 01:03:10

ubuntuLinux
點贊
收藏

51CTO技術(shù)棧公眾號

能直接看的av| 国产xxxxx在线观看| 国产人成视频在线观看| 久久精品视频6| 国产成人精品福利| 在线亚洲一区观看| 国产三级中文字幕| 午夜福利视频一区二区| 日本美女一区二区三区| 欧美大片免费看| 国产伦精品一区二区三区视频女| 免费观看亚洲视频大全| 岛国av在线不卡| 中文字幕一区二区三区在线乱码 | 色菇凉天天综合网| 亚洲 欧洲 日韩| 欧洲免费在线视频| 国产精品中文字幕日韩精品 | 国产aa精品| 黑人巨大精品欧美一区二区| 中日韩在线视频| 日韩国产福利| 国产成人高清视频| 国产精品久久精品| 午夜精品久久久久久久久久久久久蜜桃| 日韩片欧美片| 亚洲精品在线观看www| 男女视频在线观看网站| 午夜av成人| 精品久久久久久久久久久久| 999久久欧美人妻一区二区| 国产在线一二| 99九九99九九九视频精品| 国产美女搞久久| 亚洲GV成人无码久久精品| 欧美日韩亚洲一区三区| 最好看的2019的中文字幕视频| 中国极品少妇xxxx| 国产在线视频欧美一区| 欧美日韩国产高清一区二区三区 | 久久久久久黄| 久久久久久久久久久成人| 色婷婷粉嫩av| 日韩综合精品| 中文字幕精品久久久久| 爱爱的免费视频| 久久99国产精品久久99大师| 日韩欧美一级特黄在线播放| 中文字幕日韩久久| 欧美美女福利视频| 欧美性受xxxx| 中文字幕第80页| 日韩av一级| 欧美日韩在线一区二区| 成人免费毛片播放| 99只有精品| 色哟哟日韩精品| 性欧美极品xxxx欧美一区二区| av资源亚洲| 在线观看91精品国产入口| 情侣黄网站免费看| 欧美动物xxx| 欧美最猛黑人xxxxx猛交| 黄色国产小视频| 国产精品蜜月aⅴ在线| 欧美老年两性高潮| 超碰人人草人人| 精品视频一二| 精品国产成人系列| 懂色av粉嫩av蜜乳av| 亚洲福利网站| 最近2019中文字幕一页二页| 国产第一页浮力| 欧美视频网站| 555www成人网| 欧美一级黄视频| 精品在线亚洲视频| 91久久偷偷做嫩草影院| 亚洲男人天堂久久| 91污片在线观看| 视频二区一区| 成人免费在线| 欧美日韩国产综合新一区| 成人在线观看黄| 欧美黄色网络| 亚洲成人性视频| 性高潮久久久久久久| 日韩精品1区| 欧美多人爱爱视频网站| 麻豆精品久久久久久久99蜜桃| 秋霞av亚洲一区二区三| 1卡2卡3卡精品视频| 五月婷婷丁香六月| 亚洲国产高清不卡| 嫩草影院中文字幕| 深夜成人影院| 日韩免费福利电影在线观看| 一卡二卡三卡四卡| 亚洲国产精品久久久天堂 | 懂色av噜噜一区二区三区av| 欧美日韩中文国产一区发布| www视频在线免费观看| 精品国产福利在线| 亚洲美女爱爱视频| 亚洲涩涩av| 九九精品视频在线| 麻豆成人免费视频| 国产黄色精品网站| 日韩精品第一页| 日本高清在线观看| 在线观看日韩电影| 最新在线黄色网址| 一精品久久久| 国产精品旅馆在线| 天天舔天天干天天操| 日韩美女啊v在线免费观看| 青青草原av在线播放| 一区二区三区国产好| 一二美女精品欧洲| 视频一区二区三区四区五区| 国产精品18久久久| 亚洲激情啪啪| 91精品论坛| 亚洲精品久久在线| 久久精品一级片| 加勒比av一区二区| 色吧亚洲视频| 成人片免费看| 日韩av综合中文字幕| 国产性猛交普通话对白| 狠狠色丁香婷综合久久| 亚洲欧美国产精品桃花| 在线观看的黄色| 亚洲国模精品一区| 国产一国产二国产三| 国产一区二区三区免费播放| 亚洲精品国产一区| 亚洲成人短视频| 亚洲精品永久免费精品| 久久午夜免费视频| 成人激情文学综合网| 日本a在线天堂| 欧美久久一区二区三区| 欧美成人在线免费视频| 国产精品人妻一区二区三区| 中文字幕在线免费不卡| 校园春色 亚洲色图| 日韩久久久久| 国产精品视频永久免费播放| 成人高潮成人免费观看| 欧美日韩亚洲另类| 天堂av免费在线| 蓝色福利精品导航| 国产精品波多野结衣| 99视频这里有精品| 久久躁狠狠躁夜夜爽| 国产乱淫片视频| 亚洲精品国久久99热| 韩国三级丰满少妇高潮| 欧美午夜国产| 国产精品我不卡| 色多多在线观看| 在线观看久久av| 国产情侣在线播放| 亚洲一区二区三区四区在线免费观看 | 日本午夜精品一区二区三区| 性欧美hd调教| 日韩在线视频免费观看高清中文| 91丨九色丨丰满| 一区二区三区四区在线免费观看| 亚洲少妇一区二区三区| 国产欧美成人| 神马影院午夜我不卡影院| 久久亚洲人体| 欧美激情一级欧美精品| 水莓100国产免费av在线播放| 在线中文字幕一区二区| 强制高潮抽搐sm调教高h| 国产91精品久久久久久久网曝门| 亚洲色成人www永久在线观看| 欧美重口另类| 国产美女被下药99| 91九色国产在线播放| 亚洲小视频在线| av男人天堂av| 精品久久久久久久久国产字幕| 亚洲欧美va天堂人熟伦| 国产激情视频一区二区三区欧美 | 亚洲三级一区| 亚洲一区二区免费在线观看| 日本欧美一二三区| 久久久久久久久免费视频| 亚洲第一综合天堂另类专| 精品人妻一区二区三区潮喷在线| 亚洲天堂久久久久久久| 一女三黑人理论片在线| 极品美女销魂一区二区三区免费 | 欧美a级理论片| www.国产在线视频| 欧美日韩亚洲在线观看| 国产91一区二区三区| 日本中文字幕一区二区| 欧美精品videos性欧美| av在线之家电影网站| 精品国产乱码久久久久久浪潮 | 亚洲毛片在线免费观看| av中文字幕播放| 色狠狠综合天天综合综合| 国产一级久久久| 中文字幕亚洲综合久久菠萝蜜| av鲁丝一区鲁丝二区鲁丝三区| 久久99国产精品尤物| 亚洲色欲综合一区二区三区| 欧美日本一区| 手机福利在线视频| 国产欧美高清视频在线| 国产一区二区三区四区hd| 91麻豆精品国产91久久久更新资源速度超快| 97在线视频国产| 亚洲小说区图片区都市| 综合国产在线观看| 理论在线观看| 日韩av网站导航| 精品人妻无码一区二区色欲产成人| 欧美在线免费视屏| 69视频免费在线观看| 香港成人在线视频| 免费日韩在线视频| 亚洲免费观看视频| 久久精品日韩无码| 国产精品乱子久久久久| 人妻少妇无码精品视频区| 91在线国产福利| 在线视频 日韩| 不卡一区二区在线| 在线xxxxx| 成人毛片在线观看| 人妻精油按摩bd高清中文字幕| 狠狠色综合播放一区二区| 亚洲精品20p| 激情久久久久久久久久久久久久久久 | 在线观看免费视频你懂的| 日韩视频亚洲视频| 五月婷婷在线观看| 日韩中文娱乐网| 欧洲日本在线| 久久精品国产99国产精品澳门| 1024视频在线| 日韩视频中文字幕| 男女啪啪在线观看| 久久久成人的性感天堂| 欧美成人hd| 欧美精品制服第一页| 日韩经典av| 欧美精品18videos性欧| 午夜欧美激情| 国产精品91久久| 九七影院97影院理论片久久| 91在线国产电影| 一区二区免费| 久久综合色一本| 狠狠做六月爱婷婷综合aⅴ | 麻豆网站视频在线观看| 久久视频在线直播| 日本无删减在线| 992tv成人免费影院| 范冰冰一级做a爰片久久毛片| 日本一区二区不卡| 久久天天久久| 99在线看视频| 亚洲素人在线| 艳色歌舞团一区二区三区| 一区二区三区网站 | 蜜桃av.网站在线观看| 国产91在线播放| 亚洲国产精选| 精品久久久久久亚洲| 欧美裸体在线版观看完整版| 一区二区三区国产福利| 亚洲国产清纯| 精品久久久久久久无码| 国产精品主播直播| 人妻无码一区二区三区| 国产精品免费视频网站| 久久艹精品视频| 欧美综合色免费| 精品人妻伦一区二区三区久久| 亚洲欧洲自拍偷拍| 成人ww免费完整版在线观看| 性色av一区二区三区在线观看| 精品自拍视频| 久久久久国产精品视频| 91久久国产| 久久久久狠狠高潮亚洲精品| 国产激情精品久久久第一区二区| 精品成人av一区二区三区| 亚洲丝袜另类动漫二区| 狠狠人妻久久久久久| 日韩精品专区在线| 福利视频在线导航| 性欧美亚洲xxxx乳在线观看| 日韩黄色三级| 你懂的视频在线一区二区| 欧美三区美女| 在线黄色免费看| 久久精品在线观看| 久久精品这里有| 欧美男女性生活在线直播观看| 天天干,夜夜操| 欧美激情视频在线| 国产成人午夜性a一级毛片| 国产在线一区二区三区欧美| 国产精品99久久久久久动医院| 免费高清在线观看免费| 国产盗摄女厕一区二区三区| 特级西西人体高清大胆| 精品久久久久久久久久| 俄罗斯嫩小性bbwbbw| 久久影院中文字幕| 男人天堂久久| 色99中文字幕| 日韩在线一二三区| aaaaaav| 性做久久久久久免费观看| 国产免费一区二区三区免费视频| 一区二区三区四区在线观看视频| 久久久男人天堂| 国产精品夜夜夜一区二区三区尤| 伊人久久大香线蕉精品组织观看| 男女污污的视频| 久久久久久免费| 超碰中文字幕在线| 亚洲精品久久久久久久久久久久| 牛牛在线精品视频| 91传媒免费看| 欧美韩日精品| 免费黄色av网址| 樱桃国产成人精品视频| 99热这里只有精品在线观看| 日韩在线视频播放| 成人在线分类| 中国一级黄色录像| 韩国女主播成人在线观看| 欧美爱爱免费视频| 7777精品伊人久久久大香线蕉经典版下载| av在线免费观看网| 国产精品视频永久免费播放| 色无极亚洲影院| 四季av一区二区三区| 亚洲人成网站精品片在线观看| 国产精品视频a| 欧美国产日韩一区二区| 91精品国产乱码久久久竹菊| 97超碰在线人人| 99国产精品久久久久| 国产精品视频久久久久久久| 国产午夜精品理论片a级探花| 激情开心成人网| 亚洲欧美日韩综合一区| 精品一区二区三区久久久| 国产喷水在线观看| 欧美大片国产精品| 黄视频免费在线看| 蜜桃视频在线观看成人| 欧美aaaaa成人免费观看视频| 日韩精品一区二区三区在线视频| 欧美一区二区三区日韩视频| 欧美草逼视频| 久久国产精品精品国产色婷婷| 久久精品亚洲| 无码人妻精品中文字幕| 精品国产一区久久| 中文字幕成在线观看| 影音先锋亚洲视频| 国产98色在线|日韩| 成人免费a视频| 日日狠狠久久偷偷四色综合免费| 91精品国产自产在线丝袜啪| 青青草原成人网| 亚洲欧洲国产专区| 黄色一级大片在线免费看国产一| 5278欧美一区二区三区| 婷婷综合五月| 99久久人妻无码中文字幕系列| 欧美在线视频全部完| 色呦呦在线免费观看| 奇米影视首页 狠狠色丁香婷婷久久综合 | 91官网在线免费观看| 国产福利视频在线观看| 久久婷婷开心| 精品亚洲国产成人av制服丝袜 | 亚洲国产专区校园欧美| 少妇精品无码一区二区免费视频| 日韩女优av电影| 成人在线爆射| 日韩精品在线视频免费观看| 久久精品一区二区三区不卡 | 国产成+人+日韩+欧美+亚洲| 999视频在线| 久久久噜噜噜久久中文字免|