日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android后台截屏实现(2)--screencap源码修改

發(fā)布時(shí)間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android后台截屏实现(2)--screencap源码修改 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? 首先找到screencap類在Android源碼中的位置,/442/frameworks/base/cmds/screencap/screencap.cpp。

源碼如下:

[cpp]?view plaincopy
  • /*?
  • ?*?Copyright?(C)?2010?The?Android?Open?Source?Project?
  • ?*?
  • ?*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");?
  • ?*?you?may?not?use?this?file?except?in?compliance?with?the?License.?
  • ?*?You?may?obtain?a?copy?of?the?License?at?
  • ?*?
  • ?*??????http://www.apache.org/licenses/LICENSE-2.0?
  • ?*?
  • ?*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software?
  • ?*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,?
  • ?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.?
  • ?*?See?the?License?for?the?specific?language?governing?permissions?and?
  • ?*?limitations?under?the?License.?
  • ?*/??
  • ??
  • #include?<errno.h>??
  • #include?<unistd.h>??
  • #include?<stdio.h>??
  • #include?<fcntl.h>??
  • ??
  • #include?<linux/fb.h>??
  • #include?<sys/ioctl.h>??
  • #include?<sys/mman.h>??
  • ??
  • #include?<binder/ProcessState.h>??
  • ??
  • #include?<gui/SurfaceComposerClient.h>??
  • #include?<gui/ISurfaceComposer.h>??
  • ??
  • #include?<ui/PixelFormat.h>??
  • ??
  • #include?<SkImageEncoder.h>??
  • #include?<SkBitmap.h>??
  • #include?<SkData.h>??
  • #include?<SkStream.h>??
  • ??
  • using?namespace?android;??
  • ??
  • static?uint32_t?DEFAULT_DISPLAY_ID?=?ISurfaceComposer::eDisplayIdMain;??
  • ??
  • static?void?usage(const?char*?pname)??
  • {??
  • ????fprintf(stderr,??
  • ????????????"usage:?%s?[-hp]?[-d?display-id]?[FILENAME]\n"??
  • ????????????"???-h:?this?message\n"??
  • ????????????"???-p:?save?the?file?as?a?png.\n"??
  • ????????????"???-d:?specify?the?display?id?to?capture,?default?%d.\n"??
  • ????????????"If?FILENAME?ends?with?.png?it?will?be?saved?as?a?png.\n"??
  • ????????????"If?FILENAME?is?not?given,?the?results?will?be?printed?to?stdout.\n",??
  • ????????????pname,?DEFAULT_DISPLAY_ID??
  • ????);??
  • }??
  • ??
  • static?SkBitmap::Config?flinger2skia(PixelFormat?f)??
  • {??
  • ????switch?(f)?{??
  • ????????case?PIXEL_FORMAT_RGB_565:??
  • ????????????return?SkBitmap::kRGB_565_Config;??
  • ????????default:??
  • ????????????return?SkBitmap::kARGB_8888_Config;??
  • ????}??
  • }??
  • ??
  • static?status_t?vinfoToPixelFormat(const?fb_var_screeninfo&?vinfo,??
  • ????????uint32_t*?bytespp,?uint32_t*?f)??
  • {??
  • ??
  • ????switch?(vinfo.bits_per_pixel)?{??
  • ????????case?16:??
  • ????????????*f?=?PIXEL_FORMAT_RGB_565;??
  • ????????????*bytespp?=?2;??
  • ????????????break;??
  • ????????case?24:??
  • ????????????*f?=?PIXEL_FORMAT_RGB_888;??
  • ????????????*bytespp?=?3;??
  • ????????????break;??
  • ????????case?32:??
  • ????????????//?TODO:?do?better?decoding?of?vinfo?here??
  • ????????????*f?=?PIXEL_FORMAT_RGBX_8888;??
  • ????????????*bytespp?=?4;??
  • ????????????break;??
  • ????????default:??
  • ????????????return?BAD_VALUE;??
  • ????}??
  • ????return?NO_ERROR;??
  • }??
  • ??
  • int?main(int?argc,?char**?argv)??
  • {??
  • ????ProcessState::self()->startThreadPool();??
  • ??
  • ????const?char*?pname?=?argv[0];??
  • ????bool?png?=?false;??
  • ????int32_t?displayId?=?DEFAULT_DISPLAY_ID;??
  • ????int?c;??
  • ????while?((c?=?getopt(argc,?argv,?"phd:"))?!=?-1)?{??
  • ????????switch?(c)?{??
  • ????????????case?'p':??
  • ????????????????png?=?true;??
  • ????????????????break;??
  • ????????????case?'d':??
  • ????????????????displayId?=?atoi(optarg);??
  • ????????????????break;??
  • ????????????case?'?':??
  • ????????????case?'h':??
  • ????????????????usage(pname);??
  • ????????????????return?1;??
  • ????????}??
  • ????}??
  • ????argc?-=?optind;??
  • ????argv?+=?optind;??
  • ??
  • ????int?fd?=?-1;??
  • ????if?(argc?==?0)?{??
  • ????????fd?=?dup(STDOUT_FILENO);??
  • ????}?else?if?(argc?==?1)?{??
  • ????????const?char*?fn?=?argv[0];??
  • ????????fd?=?open(fn,?O_WRONLY?|?O_CREAT?|?O_TRUNC,?0664);??
  • ????????if?(fd?==?-1)?{??
  • ????????????fprintf(stderr,?"Error?opening?file:?%s?(%s)\n",?fn,?strerror(errno));??
  • ????????????return?1;??
  • ????????}??
  • ????????const?int?len?=?strlen(fn);??
  • ????????if?(len?>=?4?&&?0?==?strcmp(fn+len-4,?".png"))?{??
  • ????????????png?=?true;??
  • ????????}??
  • ????}??
  • ??
  • ????if?(fd?==?-1)?{??
  • ????????usage(pname);??
  • ????????return?1;??
  • ????}??
  • ??
  • ????void?const*?mapbase?=?MAP_FAILED;??
  • ????ssize_t?mapsize?=?-1;??
  • ??
  • ????void?const*?base?=?0;??
  • ????uint32_t?w,?s,?h,?f;??
  • ????size_t?size?=?0;??
  • ??
  • ????ScreenshotClient?screenshot;??
  • ????sp<IBinder>?display?=?SurfaceComposerClient::getBuiltInDisplay(displayId);??
  • ????if?(display?!=?NULL?&&?screenshot.update(display)?==?NO_ERROR)?{??
  • ????????base?=?screenshot.getPixels();??
  • ????????w?=?screenshot.getWidth();??
  • ????????h?=?screenshot.getHeight();??
  • ????????s?=?screenshot.getStride();??
  • ????????f?=?screenshot.getFormat();??
  • ????????size?=?screenshot.getSize();??
  • ????}?else?{??
  • ????????const?char*?fbpath?=?"/dev/graphics/fb0";??
  • ????????int?fb?=?open(fbpath,?O_RDONLY);??
  • ????????if?(fb?>=?0)?{??
  • ????????????struct?fb_var_screeninfo?vinfo;??
  • ????????????if?(ioctl(fb,?FBIOGET_VSCREENINFO,?&vinfo)?==?0)?{??
  • ????????????????uint32_t?bytespp;??
  • ????????????????if?(vinfoToPixelFormat(vinfo,?&bytespp,?&f)?==?NO_ERROR)?{??
  • ????????????????????size_t?offset?=?(vinfo.xoffset?+?vinfo.yoffset*vinfo.xres)?*?bytespp;??
  • ????????????????????w?=?vinfo.xres;??
  • ????????????????????h?=?vinfo.yres;??
  • ????????????????????s?=?vinfo.xres;??
  • ????????????????????size?=?w*h*bytespp;??
  • ????????????????????mapsize?=?offset?+?size;??
  • ????????????????????mapbase?=?mmap(0,?mapsize,?PROT_READ,?MAP_PRIVATE,?fb,?0);??
  • ????????????????????if?(mapbase?!=?MAP_FAILED)?{??
  • ????????????????????????base?=?(void?const?*)((char?const?*)mapbase?+?offset);??
  • ????????????????????}??
  • ????????????????}??
  • ????????????}??
  • ????????????close(fb);??
  • ????????}??
  • ????}??
  • ??
  • ????if?(base)?{??
  • ????????if?(png)?{??
  • ????????????SkBitmap?b;??
  • ????????????b.setConfig(flinger2skia(f),?w,?h,?s*bytesPerPixel(f));??
  • ????????????b.setPixels((void*)base);??
  • ????????????SkDynamicMemoryWStream?stream;??
  • ????????????SkImageEncoder::EncodeStream(&stream,?b,??
  • ????????????????????SkImageEncoder::kPNG_Type,?SkImageEncoder::kDefaultQuality);??
  • ????????????SkData*?streamData?=?stream.copyToData();??
  • ????????????write(fd,?streamData->data(),?streamData->size());??
  • ????????????streamData->unref();??
  • ????????}?else?{??
  • ????????????write(fd,?&w,?4);??
  • ????????????write(fd,?&h,?4);??
  • ????????????write(fd,?&f,?4);??
  • ????????????size_t?Bpp?=?bytesPerPixel(f);??
  • ????????????for?(size_t?y=0?;?y<h?;?y++)?{??
  • ????????????????write(fd,?base,?w*Bpp);??
  • ????????????????base?=?(void?*)((char?*)base?+?s*Bpp);??
  • ????????????}??
  • ????????}??
  • ????}??
  • ????close(fd);??
  • ????if?(mapbase?!=?MAP_FAILED)?{??
  • ????????munmap((void?*)mapbase,?mapsize);??
  • ????}??
  • ????return?0;??
  • }??

  • ??????? 由源碼可以看出,screencap的入口main方法是從命令行獲取參數(shù),通過(guò)分析后執(zhí)行相應(yīng)的操作。我們要想在java層調(diào)用這個(gè)類,就要把它的入口改成native方法的接口,修改后的代碼如下:

    [cpp]?view plaincopy
  • #include?<jni.h>??
  • #include?"com_android_servicescreencap_ScreenCap.h"??
  • ??
  • #include?<errno.h>??
  • #include?<unistd.h>??
  • #include?<stdio.h>??
  • #include?<fcntl.h>??
  • ??
  • #include?<linux/fb.h>??
  • #include?<sys/ioctl.h>??
  • #include?<sys/mman.h>??
  • ??
  • #include?<binder/ProcessState.h>??
  • ??
  • #include?<gui/SurfaceComposerClient.h>??
  • #include?<gui/ISurfaceComposer.h>??
  • ??
  • #include?<ui/PixelFormat.h>??
  • ??
  • #include?<SkImageEncoder.h>??
  • #include?<SkBitmap.h>??
  • #include?<SkData.h>??
  • #include?<SkStream.h>??
  • ??
  • #include?<android/log.h>??
  • #define?LOG_TAG?"ServiceScreenCap"??
  • #define?LOGD(...)?__android_log_print(ANDROID_LOG_DEBUG,?LOG_TAG,?__VA_ARGS__)??
  • #define?LOGI(...)?__android_log_print(ANDROID_LOG_INFO,?LOG_TAG,?__VA_ARGS__)??
  • #define?LOGE(...)?__android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)??
  • ??
  • using?namespace?android;??
  • ??
  • static?uint32_t?DEFAULT_DISPLAY_ID?=?ISurfaceComposer::eDisplayIdMain;??
  • ??
  • ??
  • static?status_t?vinfoToPixelFormat(const?fb_var_screeninfo&?vinfo,??
  • ????????uint32_t*?bytespp,?uint32_t*?f)??
  • {??
  • ??
  • ????switch?(vinfo.bits_per_pixel)?{??
  • ????????case?16:??
  • ????????????*f?=?PIXEL_FORMAT_RGB_565;??
  • ????????????*bytespp?=?2;??
  • ????????????break;??
  • ????????case?24:??
  • ????????????*f?=?PIXEL_FORMAT_RGB_888;??
  • ????????????*bytespp?=?3;??
  • ????????????break;??
  • ????????case?32:??
  • ????????????//?TODO:?do?better?decoding?of?vinfo?here??
  • ????????????*f?=?PIXEL_FORMAT_RGBX_8888;??
  • ????????????*bytespp?=?4;??
  • ????????????break;??
  • ????????default:??
  • ????????????return?BAD_VALUE;??
  • ????}??
  • ????return?NO_ERROR;??
  • }??
  • ??
  • static?SkBitmap::Config?flinger2skia(PixelFormat?f)??
  • {??
  • ????switch?(f)?{??
  • ????????case?PIXEL_FORMAT_RGB_565:??
  • ????????????return?SkBitmap::kRGB_565_Config;??
  • ????????default:??
  • ????????????return?SkBitmap::kARGB_8888_Config;??
  • ????}??
  • }??
  • ??
  • ??
  • /*?
  • ?*?Class:?????com_android_servicescreencap_ScreenCap?
  • ?*?Method:????currentscreen?
  • ?*?Signature:?(Ljava/lang/String;)I?
  • ?*/??
  • JNIEXPORT?jint??
  • JNICALL?ScreenCap_currentscreen(JNIEnv?*env,??
  • ????????jclass?clazz,?jstring?jpath)?{??
  • ??
  • ????ProcessState::self()->startThreadPool();??
  • ??
  • ????int32_t?displayId?=?DEFAULT_DISPLAY_ID;??
  • ??
  • ????const?char*?fn?=?env->GetStringUTFChars(jpath,NULL);??
  • ????LOGI("=====jpath:%s?\n",?fn);??
  • ??
  • ????if?(fn?==?NULL)?{??
  • ????????LOGE("=====path?=?%s?\n?=====err:?%s?\n",fn,?strerror(errno));??
  • ????????return?1;??
  • ????}??
  • ????int?fd?=?-1;??
  • ????fd?=?open(fn,?O_WRONLY?|?O_CREAT?|?O_TRUNC,?0664);??
  • ????LOGI("=====after?open?,fd:%d?\n",fd);??
  • ????if?(fd?==?-1)?{??
  • ????????LOGE("=====err:?%s?\n",?strerror(errno));??
  • ????????return?2;??
  • ????}??
  • ??
  • ????void?const*?mapbase?=?MAP_FAILED;??
  • ????ssize_t?mapsize?=?-1;??
  • ??
  • ????void?const*?base?=?0;??
  • ????uint32_t?w,?s,?h,?f;??
  • ????size_t?size?=?0;??
  • ??
  • ????ScreenshotClient?screenshot;??
  • ????sp?<?IBinder?>?display?=?SurfaceComposerClient::getBuiltInDisplay(displayId);??
  • ????if?(display?!=?NULL?&&?screenshot.update(display)?==?NO_ERROR)?{??
  • ????????base?=?screenshot.getPixels();??
  • ????????w?=?screenshot.getWidth();??
  • ????????h?=?screenshot.getHeight();??
  • ????????s?=?screenshot.getStride();??
  • ????????f?=?screenshot.getFormat();??
  • ????????size?=?screenshot.getSize();??
  • ????}?else?{??
  • ????????const?char*?fbpath?=?"/dev/graphics/fb0";??
  • ????????int?fb?=?open(fbpath,?O_RDONLY);??
  • ????????LOGI("=====read?framebuffer,?fb:%d?\n",?fb);??
  • ????????if?(fb?>=?0)?{??
  • ????????????struct?fb_var_screeninfo?vinfo;??
  • ????????????if?(ioctl(fb,?FBIOGET_VSCREENINFO,?&vinfo)?==?0)?{??
  • ????????????????uint32_t?bytespp;??
  • ????????????????if?(vinfoToPixelFormat(vinfo,?&bytespp,?&f)?==?NO_ERROR)?{??
  • ????????????????????size_t?offset?=?(vinfo.xoffset?+?vinfo.yoffset?*?vinfo.xres)??
  • ????????????????????????????*?bytespp;??
  • ????????????????????w?=?vinfo.xres;??
  • ????????????????????h?=?vinfo.yres;??
  • ????????????????????s?=?vinfo.xres;??
  • ????????????????????size?=?w?*?h?*?bytespp;??
  • ????????????????????mapsize?=?offset?+?size;??
  • ????????????????????mapbase?=?mmap(0,?mapsize,?PROT_READ,?MAP_PRIVATE,?fb,?0);??
  • ????????????????????if?(mapbase?!=?MAP_FAILED)?{??
  • ????????????????????????base?=?(void?const?*)?((char?const?*)?mapbase?+?offset);??
  • ????????????????????}??
  • ????????????????}??
  • ????????????}??
  • ????????????close(fb);??
  • ????????}else{??
  • ????????????LOGE("=====fb?=?%d?,?err:?%s?\n",fb,?strerror(errno));??
  • ????????????return?3;??
  • ????????}??
  • ????}??
  • ??
  • ????if?(base)?{??
  • ????????SkBitmap?b;??
  • ????????b.setConfig(flinger2skia(f),?w,?h,?s?*?bytesPerPixel(f));??
  • ????????b.setPixels((void*)?base);??
  • ????????SkDynamicMemoryWStream?stream;??
  • ????????SkImageEncoder::EncodeStream(&stream,?b,?SkImageEncoder::kPNG_Type,??
  • ????????????????SkImageEncoder::kDefaultQuality);??
  • ????????SkData*?streamData?=?stream.copyToData();??
  • ????????write(fd,?streamData->data(),?streamData->size());??
  • ????????streamData->unref();??
  • ????}??
  • ????close?(fd);??
  • ????if?(mapbase?!=?MAP_FAILED)?{??
  • ????????munmap((void?*)?mapbase,?mapsize);??
  • ????}??
  • ????return?0;??
  • }??
  • ??
  • ??
  • static?JNINativeMethod?methods[]?=?{??
  • ????????{"currentscreen","(Ljava/lang/String;)I",(void*)ScreenCap_currentscreen},??
  • };??
  • ??
  • static?int?registerNativeMethods(JNIEnv*?env,const?char*?classname,JNINativeMethod*?gMethods,int?numMethods?){??
  • ????jclass?clazz;??
  • ????clazz?=?env->FindClass(classname);??
  • ????if(clazz?==?NULL){??
  • ????????return?JNI_FALSE;??
  • ????}??
  • ????if(env->RegisterNatives(clazz,gMethods,numMethods)?<0?){??
  • ????????return?JNI_FALSE;??
  • ????}??
  • ????return?JNI_TRUE;??
  • }??
  • ??
  • ??
  • ??
  • static?int?registerNatives(JNIEnv*?env)??
  • {??
  • ??if?(!registerNativeMethods(env,?"com/android/servicescreencap/ScreenCap",??
  • ?????????????????methods,?sizeof(methods)?/?sizeof(methods[0])))?{??
  • ????return?JNI_FALSE;??
  • ??}??
  • ??
  • ??return?JNI_TRUE;??
  • }??
  • ??
  • ??
  • typedef?union?{??
  • ????JNIEnv*?env;??
  • ????void*?venv;??
  • }?UnionJNIEnvToVoid;??
  • ??
  • jint?JNI_OnLoad(JavaVM*?vm,?void*?reserved)??
  • {??
  • ????UnionJNIEnvToVoid?uenv;??
  • ????uenv.venv?=?NULL;??
  • ????jint?result?=?-1;??
  • ????JNIEnv*?env?=?NULL;??
  • ??
  • ??
  • ????if?(vm->GetEnv(&uenv.venv,?JNI_VERSION_1_6)?!=?JNI_OK)?{??
  • ?????????return?result;??
  • ????}??
  • ????env?=?uenv.env;??
  • ??
  • ????if?(registerNatives(env)?!=?JNI_TRUE)?{??
  • ?????????return?result;??
  • ????}??
  • ??
  • ????result?=?JNI_VERSION_1_6;??
  • ??
  • ????return?result;??
  • }??

  • ??????? 修改后的代碼入口是ScreenCap_currentscreen,該方法接收一個(gè)地址,將當(dāng)前屏幕截取到該地址下。代碼中加入了日志,可以打印native層的錯(cuò)誤信息。


    此處需采用動(dòng)態(tài)方式注冊(cè)本地方法,靜態(tài)方式好像會(huì)有問(wèn)題。



    參考鏈接:?

    Android: How to Capture Screen in Gingerbread(2.3中實(shí)現(xiàn)截屏)

    Android: How to Capture Screen in Gingerbread(2.3中實(shí)現(xiàn)截屏)(續(xù))

    Android系統(tǒng)截屏的實(shí)現(xiàn)(附代碼)


    原文地址: http://blog.csdn.net/lingfengxu/article/details/43487793

    總結(jié)

    以上是生活随笔為你收集整理的android后台截屏实现(2)--screencap源码修改的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品久久久久久无码中文野结衣 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 亚洲一区人妻 | 啪啪自拍视频 | 国产午夜精品免费一区二区三区视频 | 欧美色妞网 | 国产经典三级 | 大陆农村乡下av | 欧美成人午夜免费视在线看片 | 91久久精品一区二区 | 辟里啪啦国语版免费观看 | 日本污网站 | 久草资源在线观看 | 一级黄色片看看 | 精品一区电影国产 | 国产精品久久久久久久久久久久久久久 | 96日本xxxxxⅹxxx70 | 玉女心经 在线 | 国产超碰人人爽人人做人人爱 | 波多野结衣av无码 | www.av777 | 丁香六月综合激情 | 久久这里只有精品6 | 麻豆亚洲av熟女国产一区二 | 好看的国产精品 | 日韩性猛交ⅹxxx乱大交 | 日韩在线视频一区二区三区 | 久久亚洲婷婷 | 日本黄色的视频 | 香蕉视频最新网址 | a天堂av| 国产精品精品国产色婷婷 | 69av在线 | 麻豆日产六区 | 狠狠干欧美 | 成人28深夜影院 | 欧美中文视频 | 日韩福利网站 | 亚洲免费中文字幕 | 精品视频在线免费看 | 亚洲精品影视 | 日本四级电影 | 亚洲蜜桃av一区二区 | 精品国产乱码久久久久久免费 | 岛国av免费在线观看 | 国产欧美在线观看 | 极品毛片 | 亚洲欧美视频在线观看 | 爱爱视频网址 | 在线观看国产一区 | 亚洲天堂免费在线 | 欧美成人精精品一区二区频 | 久久黄色录像 | 自拍偷自拍亚洲精品播放 | 国产网站精品 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产综合在线视频 | 亚洲色成人www永久网站 | 91天堂素人 | 国产精品成人电影在线观看 | 国产精品99久久久久 | 色羞羞| 狠狠干av| 日韩精品卡通动漫网站 | 长河落日电视连续剧免费观看01 | 视频在线观看一区二区 | 本道久久| 国产网站黄 | 成人精品视频 | 欧美1区2区 | 国产精品无码无卡无需播放器 | 97精品人妻一区二区三区在线 | 伊人毛片 | 国产精品免费网站 | 亚洲成人网页 | 日韩国产一区二区三区 | 激情四射综合网 | 国产精品国产三级国产aⅴ9色 | 后入内射无码人妻一区 | 麻豆久久久午夜一区二区 | 欧美刺激性大交 | 一极毛片 | 香蕉手机网| 美女脱衣服一干二净 | 隣の若妻さん波多野结衣 | 爱的色放韩国电影 | 成人亚洲在线 | 三级黄视频 | 国产高清精品软件丝瓜软件 | 亚洲成人三区 | av国产免费| 欧美激情第五页 | 高潮喷水一区二区三区 | 日韩毛片中文字幕 | 久久久久国产精品午夜一区 | 久久久久久久久久一级 | 欧美影视一区二区三区 | 涩涩视频网站 | 无码精品人妻一区二区三区漫画 |